R:处理包含字符串和布尔值的数据帧
我在R中有一个data.frame;它叫R:处理包含字符串和布尔值的数据帧,r,R,我在R中有一个data.frame;它叫p。data.frame中的每个元素都是True或False。我的变量p有m行和n列。对于每一行,严格来说只有一个TRUE元素 它还有列名,即字符串。我想做的是: 对于p中的每一行,我看到一个TRUE我想用相应列的名称替换 然后我想将data.frame(现在包含FALSEs和列名)折叠为一个向量,该向量将包含m个元素 我想以一种R-thonic的方式来做这件事,以便继续我在R中的启蒙,并为一个没有for循环的世界做出贡献 我可以使用以下for循环执行步骤
p
。data.frame中的每个元素都是True或False。我的变量p
有m行和n列。对于每一行,严格来说只有一个TRUE
元素
它还有列名,即字符串。我想做的是:
p
中的每一行,我看到一个TRUE
我想用相应列的名称替换FALSE
s和列名)折叠为一个向量,该向量将包含m个元素for (i in seq(length(colnames(p)))) {
p[p[,i]==TRUE,i]=colnames(p)[i]
}
但是这里没有什么美,我完全赞同这种可能是错误的想法。也许错误太强烈了,但它们肯定不是伟大的
我真的不知道怎么做第二步。我有点希望字符串和
FALSE
的和会返回字符串,但它没有返回。我有点希望我可以使用某种OR运算符,但不能完全理解(Python用'bob'
响应False或'bob'
)。因此,我再次呼吁你们这些美丽的国家人民给予帮助 以下是一些示例数据:
df <- data.frame(a=c(FALSE, TRUE, FALSE), b=c(TRUE, FALSE, FALSE), c=c(FALSE, FALSE, TRUE))
或者不使用直接使用应用
:
idx <- which(as.matrix(df), arr.ind=T)
names(df)[idx[order(idx[,1]),"col"]]
idx使用apply
浏览索引,并使用该索引访问列名:
> df <- data.frame(a=c(TRUE,FALSE,FALSE),b=c(FALSE,FALSE,TRUE),
+ c=c(FALSE,TRUE,FALSE))
> df
a b c
1 TRUE FALSE FALSE
2 FALSE FALSE TRUE
3 FALSE TRUE FALSE
> colnames(df)[apply(df, 1, which)]
[1] "a" "c" "b"
>
>测向
a、b、c
1真假假假
2假假假真
3假真假
>colnames(df)[应用(df,1,which)]
[1] “a”“c”“b”
>
Wow。我们又一次在同一时间独立地得出了大致相同的解决方案。甚至数据!你赢了五分钟,但我使用真/假而不是非常淘气和气馁的T/F得到了更高的技术分数:)显然,我应该得到绿色的勾号,因为我给出了两个解决方案。:)嗯,我觉得你的第二个解决方案有问题!它不会在一列中处理多个TRUEs,而共享解决方案会处理这个细节。使用df Good catch比较输出。我刚刚纠正了这一点。让我们知道哪些方法在您的数据集上表现更好?我已经老了。你领先我五分钟;-)见德克解决方案下的评论!第二种方法给出的响应与第一种方法不同。。
> df <- data.frame(a=c(TRUE,FALSE,FALSE),b=c(FALSE,FALSE,TRUE),
+ c=c(FALSE,TRUE,FALSE))
> df
a b c
1 TRUE FALSE FALSE
2 FALSE FALSE TRUE
3 FALSE TRUE FALSE
> colnames(df)[apply(df, 1, which)]
[1] "a" "c" "b"
>