首页 > 解决方案 > 任何列中存在特定值的子集数据框

问题描述

我有一个(令人尴尬的)简单问题:如何在数据框的任何列中的单个值上过滤或子集数据框:

df <- data.frame(
  v1 = c(1:10),
  v2 = c(10:1),
  v3 = c(1,3,2,9,5,6,1,2,3,9)
)

比如说,我想df对那些在任何列中包含 value 的行进行子集化9。我可以这样做:

df[df[,1]==9|df[,2]==9|df[,3]==9,]
   v1 v2 v3
2   2  9  3
4   4  7  9
9   9  2  3
10 10  1  9

但是对于这样一个微不足道的任务,一个如此复杂的代码!必须有更有效的方法,无论是在包中base R还是在其他包中。

标签: rfiltersubset

解决方案


使用rowSums

subset(df, rowSums(df == 9, na.rm = TRUE) > 0)

#   v1 v2 v3
#2   2  9  3
#4   4  7  9
#9   9  2  3
#10 10  1  9

推荐阅读