对于每个受试者,基于以下内容保留一个观察(或行):
如果var2=c and var3=B
则保持观察结果。
如果没有,请检查if var2=c and var3=S
并保持观察结果。
如果没有,那么检查是否var2=L and var3=B
,
最后,检查是否var2=L and var3=S
,如果没有放0。
任何帮助都将不胜感激。
我的数据如下:
id var1 var2 var3
1 100 L S
1 100 L B
1 2 C B
1 2 C S
2 5 C S
2 10 L S
2 NA L B
2 NA C B
我想要的结果是:
id var1 var2 var3
1 2 C B
2 5 C S
答案 0 :(得分:0)
以下是使用dplyr
,
library(dplyr)
x <- c('CB', 'CS', 'LB', 'LS') #vector with conditions
df %>%
group_by(id) %>%
na.omit() %>%
slice(order(match(paste0(var2, var3), x))[1])
#Source: local data frame [2 x 4]
#Groups: id [2]
# id var1 var2 var3
# <int> <int> <fctr> <fctr>
#1 1 2 C B
#2 2 5 C S
数据强>
dput(df)
structure(list(id = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), var1 = c(100L,
100L, 2L, 2L, 5L, 10L, NA, NA), var2 = structure(c(2L, 2L, 1L,
1L, 1L, 2L, 2L, 1L), .Label = c("C", "L"), class = "factor"),
var3 = structure(c(2L, 1L, 1L, 2L, 2L, 2L, 1L, 1L), .Label = c("B",
"S"), class = "factor")), .Names = c("id", "var1", "var2",
"var3"), class = "data.frame", row.names = c(NA, -8L))