根据条件和 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"
  )
  )