搜索R数据框中所有列的值
这是一个示例数据帧搜索R数据框中所有列的值,r,dataframe,data.table,dplyr,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
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)
这样的解决方案只适用于搜索特定列
dplyr
或数据。可接受表
解决方案
谢谢。使用
行和
检查逻辑数据框是否正常工作:
df[rowSums(df[-1] == 1.0) != 0, 'company']
[1] b d
Levels: a b c d
var%select(债券:现金)%%>%name
plyr::ldply(变量,函数(x)粘贴(“过滤器(df,,,x,==1)”)%%>%parse(文本=)%%>%eval)
公司债券股本现金
1b100
2 d 0 1 0
另一个选项:
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
我们还可以使用
减少和=
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
res顺便说一句……你能分享一下如何搜索非数字列吗?你是说每列的过滤条件不同吗?我认为这种方法不适用于那种情况。无论如何,您需要更具体地了解列和条件是什么。仅供参考,检查浮点数是否相等是一项容易出错的工作。试着看看x=(.1+.2)*(10/3)
,然后测试x==1
…Fwiw,这个问题有一些变化:我认为akrun的方法是df[!!行和(df==1),]
:)@pierrelaffortune是的,你是对的,但有人已经发布了带有行和的解决方案,所以我不想就剽窃问题争吵:-)@pierrelaffortune-在这种情况下,是的,但我认为如果多列中有一个1,就需要唯一性。
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