由多个条件子集

Tap*_*n73 7 r subset

也许这是基本的东西,但我找不到答案.
我有

Id Year V1  
 1 2009 33   
 1 2010 67  
 1 2011 38  
 2 2009 45  
 3 2009 65  
 3 2010 74  
 4 2009 47  
 4 2010 51  
 4 2011 14
Run Code Online (Sandbox Code Playgroud)

我需要只选择具有相同Id但在2009年,2010年和2011年的三年中的行.

Id Year V1  
 1 2009 33  
 1 2010 67  
 1 2011 38  
 4 2009 47  
 4 2010 51  
 4 2011 14   
Run Code Online (Sandbox Code Playgroud)

我试试

d1_3 <- subset(d1, Year==2009 |Year==2010 |Year==2011 )
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

任何人都可以提供一些建议,告诉我如何在R中做到这一点?

Hen*_*rik 4

我认为ave这里可能有用。我将您的原始数据框称为“df”。对于每个 ID,检查年份 ( ) 中是否存在 2009-2011 年2009:2011 %in% x。这给出了一个可以被sum医学处理的逻辑向量。测试总和是否等于 3(如果所有 Years 都存在,则总和为 3),这将生成一个新的逻辑向量,该向量用于对数据帧的行进行子集化。

df[ave(df$Year, df$Id, FUN = function(x) sum(2009:2011 %in% x) == 3, ]
#   Id Year V1
# 1  1 2009 33
# 2  1 2010 67
# 3  1 2011 38
# 7  4 2009 47
# 8  4 2010 51
# 9  4 2011 14
Run Code Online (Sandbox Code Playgroud)