我有超过1000人的名为df
的纵向数据,如下所示:
id year name status
1 1984 James 4
1 1985 James 1
2 1983 John 2
2 1984 John 1
3 1980 Amy 2
3 1981 Amy 2
4 1930 Jane 4
4 1931 Jane 5
我正在尝试按某些id
对数据进行子集化。例如,我有一个由dd
组成的向量id
,我想将其分组:
dd<-c(1,3)
我尝试了以下但是没有用,例如:
subset<-subset(df, subset(df$id==dd))
或
subset<-subset(df, subset(unique(df$id))==dd))
或
subset<-df[which(unique(df$id)==dd),]
或者我尝试过for循环
for (i in 1:2){
subset<-subset(df, subset=(unique(df$id)==dd[i]))
}
是否有办法只选择id
s与向量dd
中的数字相匹配的行?
答案 0 :(得分:5)
使用%in%
和逻辑索引:
df[df$id %in% dd,]
id year name status
1 1 1984 James 4
2 1 1985 James 1
5 3 1980 Amy 2
6 3 1981 Amy 2
答案 1 :(得分:1)
作为替代方案,您可以使用'dplyr'一个新的包(作者:Hadley Wickham),它提供了一套非常快速的工具来有效地操作数据集。
require(dplyr)
filter(df,id %in% dd )
id year name status
1 1 1984 James 4
2 1 1985 James 1
3 3 1980 Amy 2
4 3 1981 Amy 2