R 检查是否在不同的列中找到名称,以及是哪一列
我有一个4列的数据框,每列代表不同的处理方式。每一列上都有蛋白质编号,每一列之间的行数不同。有一种方法可以比较所有4列,并得到第五列,说明是否在哪一列中找到了值?我知道我有一些值将发生在两个甚至三个列中,我想知道是否有一种方法可以在新的列中得到最终结果 我在%Data$B中尝试了R 检查是否在不同的列中找到名称,以及是哪一列,r,R,我有一个4列的数据框,每列代表不同的处理方式。每一列上都有蛋白质编号,每一列之间的行数不同。有一种方法可以比较所有4列,并得到第五列,说明是否在哪一列中找到了值?我知道我有一些值将发生在两个甚至三个列中,我想知道是否有一种方法可以在新的列中得到最终结果 我在%Data$B中尝试了Data$A%,但这只在两列之间给出了TRUE或FALSE。我一直在寻找一些选项,比如匹配,甚至包含,但所有选项似乎只能给我一个正确或错误的答案 我需要的是这样的东西 A B C 1 DSFG
Data$A%,但这只在两列之间给出了TRUE
或FALSE
。我一直在寻找一些选项,比如匹配,甚至包含,但所有选项似乎只能给我一个正确或错误的答案
我需要的是这样的东西
A B C
1 DSFG DSFG DSGG
2 DDEG DDED DDEE
3 HUGO HUGI HUGO
如果这是我的表,我想要这样的结果
D(?) E
1 DSFG A,B
2 DSGG C
4 DDEG A
5 DDED B
6 DDEE C
7 HUGO A,C
8 HUGI B
解决方案
通过base R的一个想法是使用堆栈
转换为long,并聚合
以获得所需的输出
aggregate(ind ~ values, stack(df), toString)
# values ind
#1 DDED B
#2 DDEE C
#3 DDEG A
#4 DSFG A, B
#5 DSGG C
#6 HUGI B
#7 HUGO A, C
注意:您的列必须是as.character
才能工作。(df[]干净利落:
输入
输出
检查:这是一个很好的答案当我运行你的时,我得到:stack.data.frame(df)中的错误:没有向量列selected@EsbenEickhardt这是因为列是因子。首先转换为字符(df[]Ahhh,现在可以工作了。所以tidyrs“聚集”只是堆栈的包装吗?stack
或重塑
好的,我同意了。谢谢,非常感谢。两种方法都很顺利。
stack(df)
values ind
1 DSFG A
2 DDEG A
3 HUGO A
4 DSFG B
5 DDED B
6 HUGI B
7 DSGG C
8 DDEE C
9 HUGO C
toString(c("A", "B", "C"))
[1] "A, B, C"
aggregate(ind ~ values, stack(df), FUN=toString)
df <- data.frame(A = c("DSFG", "DDEG", "HUGO"), B = c("DSFG", "DDED", "HUGI"), C = c("DSGG", "DDEE", "HUGO"))
library(tidyverse)
df %>%
gather("Column", "Value", 1:3) %>%
group_by(Value) %>%
summarise(Cols = paste(Column, collapse = ","))
Value Cols
DDED B
DDEE C
DDEG A
DSFG A,B
DSGG C
HUGI B
HUGO A,C