搜索R数据框中所有列的值

时间:2016-06-29 02:39:35

标签: r dataframe data.table dplyr

这是一个示例数据框。

df = data.frame(company = c('a', 'b', 'c', 'd'),
                 bond = c(0.2, 1, 0.3, 0),
                 equity = c(0.7, 0, 0.5, 1),
                 cash = c(0.1, 0, 0.2, 0))
df

  company bond equity cash
1       a  0.2    0.7  0.1
2       b  1.0    0.0  0.0
3       c  0.3    0.5  0.2
4       d  0.0    1.0  0.0

我需要找到任何列中包含1.0的公司。 预期结果应为 b和d

请提供适用于> 20列的解决方案。 像df %>% filter(bond == 1)这样的解决方案仅适用于搜索特定列。

dplyrdata.table解决方案可以接受。

感谢。

4 个答案:

答案 0 :(得分:4)

使用rowSums检查逻辑数据框是否应该起作用:

df[rowSums(df[-1] == 1.0) != 0, 'company']
[1] b d
Levels: a b c d

答案 1 :(得分:4)

另一种选择:

df[unique(row(df[-1])[df[-1] == 1L]),]
#  company bond equity cash
#2       b    1      0    0
#4       d    0      1    0

df$company[unique(row(df[-1])[df[-1] == 1L])]
#[1] b d
#Levels: a b c d

答案 2 :(得分:4)

我们也可以将Reduce==

一起使用
res <- df[Reduce(`+`, lapply(df[-1], `==`, 1))!=0,]
res
#   company bond equity cash
#2       b    1      0    0
#4       d    0      1    0

res$company
#[1] b d
#Levels: a b c d

答案 3 :(得分:1)

var <- df %>% select(bond:cash) %>% names
plyr::ldply(var, function(x) paste("filter(df,", x, "==1)") %>% parse(text=.) %>% eval)
  company bond equity cash
1       b    1      0    0
2       d    0      1    0