根据多种条件选择观察

时间:2016-07-13 12:51:28

标签: r conditional-statements multiple-conditions

对于每个受试者,基于以下内容保留一个观察(或行):

如果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

1 个答案:

答案 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))