R 检查是否在不同的列中找到名称,以及是哪一列

R 检查是否在不同的列中找到名称,以及是哪一列,r,R,我有一个4列的数据框,每列代表不同的处理方式。每一列上都有蛋白质编号,每一列之间的行数不同。有一种方法可以比较所有4列,并得到第五列,说明是否在哪一列中找到了值?我知道我有一些值将发生在两个甚至三个列中,我想知道是否有一种方法可以在新的列中得到最终结果 我在%Data$B中尝试了Data$A%,但这只在两列之间给出了TRUE或FALSE。我一直在寻找一些选项,比如匹配,甚至包含,但所有选项似乎只能给我一个正确或错误的答案 我需要的是这样的东西 A B C 1 DSFG

我有一个4列的数据框,每列代表不同的处理方式。每一列上都有蛋白质编号,每一列之间的行数不同。有一种方法可以比较所有4列,并得到第五列,说明是否在哪一列中找到了值?我知道我有一些值将发生在两个甚至三个列中,我想知道是否有一种方法可以在新的列中得到最终结果

我在%Data$B中尝试了
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