类似列上的子集数据帧

时间:2014-02-07 18:50:37

标签: r dataframe subset

我有一个包含多列的数据框,我想使用类似命名的列对数据框进行子集化。 例如,我的数据框如下所示:

df1<-data.frame(a=c("a","b","c"),px1=c(123,456,789),px2=c(111,222,333),px3=c(278,908,456),b=c(456,123,333))
> df1
  a px1 px2 px3   b
1 a 123 111 278 456
2 b 456 222 908 123
3 c 789 333 456 333

现在我要创建一个df1的子集,其中px1或px2或px3的值为456(实际情况中有更多的变量 我尝试了以下方法,但没有奏效:

 > subset(df1,grep("px",names(df1)) %in% c(456))
 [1] a   px1 px2 px3 b  
 <0 rows> (or 0-length row.names)

我无法弄清楚缺失的部分 - 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

这是一个简单的方法:

df1[as.logical(rowSums(df1[grepl("px", names(df1))] == 456)), ]

  a px1 px2 px3   b
2 b 456 222 908 123
3 c 789 333 456 333

如果您想要处理多个值,例如456333,您可以使用以下方法:

df1[as.logical(rowSums(sapply(df1[grepl("px", names(df1))], 
                              "%in%", c(456, 333)))), ]