根据条件和 R 中的上一列制作一列
Make a column based on conditions and previous columnb in R
我有这样的数据集:
structure(list(Q3.3 = c("Female", "Male", "Female", "Male", "Female",
"Male", "Male", "Male", "Male", "Male", "Male", "Male", "Male",
"Female", "Female", "Male", "Female", "Male", "Male", "Female",
"Male", "Male", "Male", "Female", "Male", "Male", "Female", "Male",
"Female", "Male"), Q6.2 = c("Yes", "NE", "Yes", "NE", "Yes",
"NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "No", "No", "NE",
"Yes", "NE", "NE", "No", "NE", "NE", "NE", "No", "NE", "NE",
"No", "NE", "Yes", "NE"), Q6.3 = c("3", "NE", "2", "NE", "1",
"NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE",
"3", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE",
"NE", "2", "NE"), Q6.4 = c("Yes", "NE", "No", "NE", "No", "NE",
"NE", "NE", "NE", "NE", "NE", "NE", "NE", "No", "No", "NE", "No",
"NE", "NE", "No", "NE", "NE", "NE", "No", "NE", "NE", "No", "NE",
"No", "NE"), Q6.5 = c("3", "NE", "NE", "NE", "NE", "NE", "NE",
"NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE",
"NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE",
"NE"), Q7.5_1 = c("Yes", "", "Yes", "", "", "", "", "", "", "",
"", "", "", "", "", "", "No, this was available, but I did not use it",
"", "", "", "", "", "", "", "", "", "", "", "Yes", ""), dataname1 = c("Q",
"Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q",
"Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q",
"Q", "Q", "Q"), Q7.5_1_bb = c("Yes", "NE", "Yes", "NE", "Yes",
"NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "No", "No", "NE",
"No, this was available, but I did not use it", "NE", "NE", "No",
"NE", "NE", "NE", "No", "NE", "NE", "No", "NE", "Yes", "NE")), row.names = c(NA,
30L), class = "data.frame")[![enter image description here][1]][1]
我想将“NE”值映射到 Q7。5_1 并且还需要将“Q7.5_1”列再次编码为“NE”
如果NOT Q6.3 = 2 或Q6.3 = 3 或Q6.3 = 4 或Q6.3 = 5 或Q6.3 = 6 或Q6.3 = 7 或 Q6.3 = 8 或 Q6.3 = 9 或 Q6.3 = 10
Or If Q6.5 = 2 Or Q6.5 = 3 Or Q6.5 = 4 Or Q6.5 = 5 Or Q6.5 = 6 Or Q6.5 = 7 或 Q6.5 = 8 或 Q6.5 = 9 或 Q6.5 = 10
或者如果 Q6.3 = 1 并且 Q6.5 = 1
df<-df %>% mutate(Q7.5_1_bb = if_else(
!(Q6.3 %in% c(2:10)) | Q6.5 %in% c(2:10) | Q6.3 == 1 & Q6.5 == 1,
Q6.2, Q7.5_1))
当我使用上面的代码时,一些值被写了,比如第 5 行
Q3.3 Q6.2 Q6.3 Q6.4 Q6.5 Q7.5_1 Q7.5_1_bb
1 Female Yes 3 Yes 3 Yes Yes
2 Male NE NE NE NE NE
3 Female Yes 2 No NE Yes Yes
4 Male NE NE NE NE NE
5 Female Yes 1 No NE Yes
虽然我希望在第 7 季度看到 NE。5_1_bb 在第 5 行。
会不会是这样:
newdf <- structure(list(Q3.3 = c("Female", "Male", "Female", "Male", "Female",
"Male", "Male", "Male", "Male", "Male", "Male", "Male", "Male",
"Female", "Female", "Male", "Female", "Male", "Male", "Female",
"Male", "Male", "Male", "Female", "Male", "Male", "Female", "Male",
"Female", "Male"), Q6.2 = c("Yes", "NE", "Yes", "NE", "Yes",
"NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "No", "No", "NE",
"Yes", "NE", "NE", "No", "NE", "NE", "NE", "No", "NE", "NE",
"No", "NE", "Yes", "NE"), Q6.3 = c("3", NA, "2", NA, "1", NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "3", NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, "2", NA), Q6.4 = c("Yes", "", "No",
"", "No", "", "", "", "", "", "", "", "", "No", "No", "", "No",
"", "", "No", "", "", "", "No", "", "", "No", "", "No", ""),
Q6.5 = c("3", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA), Q7.5_1 = c("Yes", "", "Yes", "", "", "", "",
"", "", "", "", "", "", "", "", "", "No, this was available, but I did not use it",
"", "", "", "", "", "", "", "", "", "", "", "Yes", "")), row.names = c(NA,
# Conditional
newdf2 <- newdf %>% mutate(Q7.5_1_bb = case_when(
!(Q6.3 %in% c(2:10)) ~ if_else(Q6.3 == 1,
if_else(Q6.5 == 1, Q7.5_1, "NE"), Q7.5_1),
Q6.5 %in% c(2:10) ~ Q7.5_1,
TRUE ~ "NE"
)
)
我有这样的数据集:
structure(list(Q3.3 = c("Female", "Male", "Female", "Male", "Female",
"Male", "Male", "Male", "Male", "Male", "Male", "Male", "Male",
"Female", "Female", "Male", "Female", "Male", "Male", "Female",
"Male", "Male", "Male", "Female", "Male", "Male", "Female", "Male",
"Female", "Male"), Q6.2 = c("Yes", "NE", "Yes", "NE", "Yes",
"NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "No", "No", "NE",
"Yes", "NE", "NE", "No", "NE", "NE", "NE", "No", "NE", "NE",
"No", "NE", "Yes", "NE"), Q6.3 = c("3", "NE", "2", "NE", "1",
"NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE",
"3", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE",
"NE", "2", "NE"), Q6.4 = c("Yes", "NE", "No", "NE", "No", "NE",
"NE", "NE", "NE", "NE", "NE", "NE", "NE", "No", "No", "NE", "No",
"NE", "NE", "No", "NE", "NE", "NE", "No", "NE", "NE", "No", "NE",
"No", "NE"), Q6.5 = c("3", "NE", "NE", "NE", "NE", "NE", "NE",
"NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE",
"NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE",
"NE"), Q7.5_1 = c("Yes", "", "Yes", "", "", "", "", "", "", "",
"", "", "", "", "", "", "No, this was available, but I did not use it",
"", "", "", "", "", "", "", "", "", "", "", "Yes", ""), dataname1 = c("Q",
"Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q",
"Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q", "Q",
"Q", "Q", "Q"), Q7.5_1_bb = c("Yes", "NE", "Yes", "NE", "Yes",
"NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "No", "No", "NE",
"No, this was available, but I did not use it", "NE", "NE", "No",
"NE", "NE", "NE", "No", "NE", "NE", "No", "NE", "Yes", "NE")), row.names = c(NA,
30L), class = "data.frame")[![enter image description here][1]][1]
我想将“NE”值映射到 Q7。5_1 并且还需要将“Q7.5_1”列再次编码为“NE”
如果NOT Q6.3 = 2 或Q6.3 = 3 或Q6.3 = 4 或Q6.3 = 5 或Q6.3 = 6 或Q6.3 = 7 或 Q6.3 = 8 或 Q6.3 = 9 或 Q6.3 = 10
Or If Q6.5 = 2 Or Q6.5 = 3 Or Q6.5 = 4 Or Q6.5 = 5 Or Q6.5 = 6 Or Q6.5 = 7 或 Q6.5 = 8 或 Q6.5 = 9 或 Q6.5 = 10
或者如果 Q6.3 = 1 并且 Q6.5 = 1
df<-df %>% mutate(Q7.5_1_bb = if_else(
!(Q6.3 %in% c(2:10)) | Q6.5 %in% c(2:10) | Q6.3 == 1 & Q6.5 == 1,
Q6.2, Q7.5_1))
当我使用上面的代码时,一些值被写了,比如第 5 行
Q3.3 Q6.2 Q6.3 Q6.4 Q6.5 Q7.5_1 Q7.5_1_bb
1 Female Yes 3 Yes 3 Yes Yes
2 Male NE NE NE NE NE
3 Female Yes 2 No NE Yes Yes
4 Male NE NE NE NE NE
5 Female Yes 1 No NE Yes
虽然我希望在第 7 季度看到 NE。5_1_bb 在第 5 行。
会不会是这样:
newdf <- structure(list(Q3.3 = c("Female", "Male", "Female", "Male", "Female",
"Male", "Male", "Male", "Male", "Male", "Male", "Male", "Male",
"Female", "Female", "Male", "Female", "Male", "Male", "Female",
"Male", "Male", "Male", "Female", "Male", "Male", "Female", "Male",
"Female", "Male"), Q6.2 = c("Yes", "NE", "Yes", "NE", "Yes",
"NE", "NE", "NE", "NE", "NE", "NE", "NE", "NE", "No", "No", "NE",
"Yes", "NE", "NE", "No", "NE", "NE", "NE", "No", "NE", "NE",
"No", "NE", "Yes", "NE"), Q6.3 = c("3", NA, "2", NA, "1", NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "3", NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, "2", NA), Q6.4 = c("Yes", "", "No",
"", "No", "", "", "", "", "", "", "", "", "No", "No", "", "No",
"", "", "No", "", "", "", "No", "", "", "No", "", "No", ""),
Q6.5 = c("3", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA), Q7.5_1 = c("Yes", "", "Yes", "", "", "", "",
"", "", "", "", "", "", "", "", "", "No, this was available, but I did not use it",
"", "", "", "", "", "", "", "", "", "", "", "Yes", "")), row.names = c(NA,
# Conditional
newdf2 <- newdf %>% mutate(Q7.5_1_bb = case_when(
!(Q6.3 %in% c(2:10)) ~ if_else(Q6.3 == 1,
if_else(Q6.5 == 1, Q7.5_1, "NE"), Q7.5_1),
Q6.5 %in% c(2:10) ~ Q7.5_1,
TRUE ~ "NE"
)
)