【发布时间】:2021-09-26 14:38:23
【问题描述】:
这是我的一个小标题。
data_current <- structure(list(ID = c(1001, 1002, 1003, 1004, 1005), Posttest.Scenario.1.Pair = c(4,
1, 4, 4, 4), Posttest.Scenario.2.Pair = c(5, 4, 5, 3, 5), Posttest.Scenario.3.Pair = c(2,
3, 3, 5, 2), Posttest.Scenario.4.Pair = c(1, 2, 1, 1, 3), Posttest.Scenario.5.Pair = c(3,
5, 2, 2, 1), Posttest.Pair.1.Scenario = c("Driveway Drunk", "Driveway Drunk",
"Driveway Drunk", "Locked Out", "Driveway Drunk"), Posttest.Pair.2.Scenario = c("Parking Lot Duo",
"Parking Lot Duo", "Domestic Disturbance", "Domestic Disturbance",
"Domestic Disturbance"), Posttest.Pair.3.Scenario = c("Baby on Bridge",
"Down and Out", "Down and Out", "Baby on Bridge", "Down and Out"
), Posttest.Pair.4.Scenario = c("Homeless at Business", "Biker Billy",
"Biker Billy", "Homeless at Business", "Biker Billy"), Posttest.Pair.5.Scenario = c("NASA EDP",
"Misery Mountain", "Misery Mountain", "NASA EDP", "Misery Mountain"
)), groups = structure(list(.rows = structure(list(1L, 2L, 3L,
4L, 5L), ptype = integer(0), class = c("vctrs_list_of", "vctrs_vctr",
"list"))), row.names = c(NA, -5L), class = c("tbl_df", "tbl",
"data.frame")), row.names = c(NA, -5L), class = c("rowwise_df",
"tbl_df", "tbl", "data.frame"))
请原谅场景名称;它们是警察训练场景的名称。有五个“对”场景。在每一对中,每个参与者在前测(已经完成)时随机获得一个场景,在后测时获得另一个场景。
名为“Posttest.Scenario.x.Pair”的列在该表示的顺序位置包含对名称(即 3)。例如,如果 Posttest.Scenario.1.Pair = 4,则意味着第一个后测场景将是第 4 对中分配的场景。
名为“Posttest.Pair.x.Scenario”的列包含为 5 对中的每一对分配的后测场景的名称。
我正在尝试在右侧创建额外的五列(“Posttest.Scenario.x”)。这些应该包含场景的名称(而不是对标识符),按其呈现顺序:
data_desired <- structure(list(ID = c(1001, 1002, 1003, 1004, 1005), Posttest.Scenario.1.Pair = c(4,
1, 4, 4, 4), Posttest.Scenario.2.Pair = c(5, 4, 5, 3, 5), Posttest.Scenario.3.Pair = c(2,
3, 3, 5, 2), Posttest.Scenario.4.Pair = c(1, 2, 1, 1, 3), Posttest.Scenario.5.Pair = c(3,
5, 2, 2, 1), Posttest.Pair.1.Scenario = c("Driveway Drunk", "Driveway Drunk",
"Driveway Drunk", "Locked Out", "Driveway Drunk"), Posttest.Pair.2.Scenario = c("Parking Lot Duo",
"Parking Lot Duo", "Domestic Disturbance", "Domestic Disturbance",
"Domestic Disturbance"), Posttest.Pair.3.Scenario = c("Baby on Bridge",
"Down and Out", "Down and Out", "Baby on Bridge", "Down and Out"
), Posttest.Pair.4.Scenario = c("Homeless at Business", "Biker Billy",
"Biker Billy", "Homeless at Business", "Biker Billy"), Posttest.Pair.5.Scenario = c("NASA EDP",
"Misery Mountain", "Misery Mountain", "NASA EDP", "Misery Mountain"
), Posttest.Scenario.1 = c("Homeless at Business", "Driveway Drunk",
"Biker Billy", "Homeless at Business", "Biker Billy"), Posttest.Scenario.2 = c("NASA EDP",
"Biker Billy", "Misery Mountain", "Baby on Bridge", "Misery Mountain"
), Posttest.Scenario.3 = c("Parking Lot Duo", "Down and Out",
"Down and Out", "NASA EDP", "Domestic Disturbance"), Posttest.Scenario.4 = c("Driveway Drunk",
"Parking Lot Duo", "Driveway Drunk", "Locked Out", "Down and Out"
), Posttest.Scenario.5 = c("Baby on Bridge", "Misery Mountain",
"Domestic Disturbance", "Domestic Disturbance", "Driveway Drunk"
)), groups = structure(list(.rows = structure(list(1L, 2L, 3L,
4L, 5L), ptype = integer(0), class = c("vctrs_list_of", "vctrs_vctr",
"list"))), row.names = c(NA, -5L), class = c("tbl_df", "tbl",
"data.frame")), row.names = c(NA, -5L), class = c("rowwise_df",
"tbl_df", "tbl", "data.frame"))
这是我写的,它完成了工作:
rowwise() %>%
mutate(`Posttest Scenario 1` = ifelse(Posttest.Scenario.1.Pair == 1, Posttest.Pair.1.Scenario,
ifelse(Posttest.Scenario.1.Pair == 2, Posttest.Pair.2.Scenario,
ifelse(Posttest.Scenario.1.Pair == 3, Posttest.Pair.3.Scenario,
ifelse(Posttest.Scenario.1.Pair == 4, Posttest.Pair.4.Scenario,
ifelse(Posttest.Scenario.1.Pair == 5, Posttest.Pair.5.Scenario,"NA"))))),
`Posttest Scenario 2` = ifelse(Posttest.Scenario.2.Pair == 1, Posttest.Pair.1.Scenario,
ifelse(Posttest.Scenario.2.Pair == 2, Posttest.Pair.2.Scenario,
ifelse(Posttest.Scenario.2.Pair == 3, Posttest.Pair.3.Scenario,
ifelse(Posttest.Scenario.2.Pair == 4, Posttest.Pair.4.Scenario,
ifelse(Posttest.Scenario.2.Pair == 5, Posttest.Pair.5.Scenario,"NA"))))),
`Posttest Scenario 3` = ifelse(Posttest.Scenario.3.Pair == 1, Posttest.Pair.1.Scenario,
ifelse(Posttest.Scenario.3.Pair == 2, Posttest.Pair.2.Scenario,
ifelse(Posttest.Scenario.3.Pair == 3, Posttest.Pair.3.Scenario,
ifelse(Posttest.Scenario.3.Pair == 4, Posttest.Pair.4.Scenario,
ifelse(Posttest.Scenario.3.Pair == 5, Posttest.Pair.5.Scenario,"NA"))))),
`Posttest Scenario 4` = ifelse(Posttest.Scenario.4.Pair == 1, Posttest.Pair.1.Scenario,
ifelse(Posttest.Scenario.4.Pair == 2, Posttest.Pair.2.Scenario,
ifelse(Posttest.Scenario.4.Pair == 3, Posttest.Pair.3.Scenario,
ifelse(Posttest.Scenario.4.Pair == 4, Posttest.Pair.4.Scenario,
ifelse(Posttest.Scenario.4.Pair == 5, Posttest.Pair.5.Scenario,"NA"))))),
`Posttest Scenario 5` = ifelse(Posttest.Scenario.5.Pair == 1, Posttest.Pair.1.Scenario,
ifelse(Posttest.Scenario.5.Pair == 2, Posttest.Pair.2.Scenario,
ifelse(Posttest.Scenario.5.Pair == 3, Posttest.Pair.3.Scenario,
ifelse(Posttest.Scenario.5.Pair == 4, Posttest.Pair.4.Scenario,
ifelse(Posttest.Scenario.5.Pair == 5, Posttest.Pair.5.Scenario,"NA"))))))
但我知道这很可怕,而且夫妻会得到很大改善。我只是不知道该怎么做。它是一个使用函数的循环吗?你能帮忙吗?
【问题讨论】:
-
您能以
dput格式发布数据吗?请使用dput(head(df))的输出编辑问题。
标签: r loops if-statement dplyr rowwise