我有如下二进制数据:
ID <- c("A", "B", "C", "D", "E", "F")
Q0 <- c(0, 0, 0, 0, 0, 0)
Q1 <- c(0, 1, 0, 0, NA, 1)
Q2 <- c(0, NA, 1, 0, NA, 1)
Q3 <- c(0, NA, NA, 1, NA, 1)
Q4 <- c(0, NA, NA, 1, NA, 1)
dta <- data.frame(ID, Q0, Q1, Q2, Q3, Q4)
如果其中一列中的行为1,则所有后续列也应为1.如果有0或NA,则下一列应保持原样.我编写了以下代码:
dta2 <- dta %>%
mutate(Q2 = case_when(Q1 == 1 ~ 1,
TRUE ~ Q2))
dta3 <- dta2 %>%
mutate(Q3 = case_when(Q2 == 1 ~ 1,
TRUE ~ Q3))
dta4 <- dta3 %>%
mutate(Q4 = case_when(Q3 == 1 ~ 1,
TRUE ~ Q4))
它工作正常,输出看起来与预期相符:
ID Q0 Q1 Q2 Q3 Q4
A 0 0 0 0 0
B 0 1 1 1 1
C 0 0 1 1 1
D 0 0 0 1 1
E 0 NA NA NA NA
F 0 1 1 1 1
我的问题是:有没有更优雅的方法?也许使用apply
或甚至一个for循环?