我有一个包含多列的数据框,我想使用类似命名的列对数据框进行子集化。 例如,我的数据框如下所示:
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)
我无法弄清楚缺失的部分 - 有人可以帮忙吗?
答案 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
如果您想要处理多个值,例如456
和333
,您可以使用以下方法:
df1[as.logical(rowSums(sapply(df1[grepl("px", names(df1))],
"%in%", c(456, 333)))), ]