【问题标题】:Identify identical columns in two data frames and extract them in r识别两个数据框中的相同列并在 r 中提取它们
【发布时间】:2017-01-15 17:28:50
【问题描述】:

我有两个数据框; mRNA (here) 和 RPPA(here)。 mRNA 数据框有 1,212 列,而RPPA 数据框有 937 列。 RPPA 数据框中的所有列名称也出现在 mRNA 数据框中(但顺序不同)。在列中,两个数据框的值不同。
我想创建一个new mRNA 数据框,它将包含与RPPA 数据框相同的列,并且不会 包含未出现在(“旧”)@ 中的列987654332@数据框。
一个例子:

mRNA <- data.frame(A=c(25,76,23,45), B=c(56,89,12,452), C=c(45,456,243,5), D=c(13,65,23,16), E=c(17:20), F=c(256,34,0,5))  
RPPA <- data.frame(B=c(46,47,45,49), A=c(51,87,34,87), D=c(76,34,98,23))  

预期的结果是:

> new.mRNA
B     A     D
56    25    13
89    76    65
12    23    23
452   45    16

我尝试将 RPPA 列名转换为向量,然后将其与命令 mRNA[col.names.vector] 一起使用,如 here 所述,但它不起作用。它给出了错误undefined columns selected

有没有快速的方法(没有函数、循环等)?

【问题讨论】:

  • 请检查您的列名中是否有前导/滞后空格
  • @akrun 抱歉,我对 r 真的很陌生。我该如何检查?
  • @deborah 很容易检查。 colnames(mRNA); colnames(RPPA)
  • @akrun 我不认为我有空格,但我确实有很多点。列名示例:TCGA.3C.AALI.01A.21.A43F.20。有问题吗?
  • 这可能是个问题。检查两个数据集列名称中的点是否相同

标签: r dataframe


【解决方案1】:

发布的两个答案都不适用于我的数据。感谢发布的两个答案,并通过更多研究,我找到了答案: 首先,您需要生成一个仅包含出现在两个数据框中的列名的向量。为此,我使用了命令intersectReduce

target <- Reduce(intersect, list(colnames(raw.mRNA), colnames(RPPA)))

现在您可以使用给出的答案:

new.mRNA <- mRNA[target]

这将生成一个具有正确值的新数据框。
谢谢@akrun 和@Titolondon 的帮助

【讨论】:

    【解决方案2】:

    您可以按照以下代码在两个数据框中找到不同的列。

    col_name=colnames(mRNA[which(!(colnames(mRNA) %in% colnames(RPPA)))])
    
    new_mRNA=mRNA %>% select(-col_name)
    

    【讨论】:

      【解决方案3】:

      我们可以通过 'RPPA' 的列名来子集mRNA 并将其分配给'RPPA'

      RPPA[] <- mRNA[names(RPPA)]
      

      【讨论】:

        【解决方案4】:

        带有向量的 data.frame 的子集应该可以工作。

        1. 创建要保留的列名的向量
        2. 使用此向量对 data.frame 进行子集


        mRNA <- data.frame(A=c(25,76,23,45), B=c(56,89,12,452), C=c(45,456,243,5), D=c(13,65,23,16), E=c(17:20), F=c(256,34,0,5))  
        RPPA <- data.frame(B=c(46,47,45,49), A=c(51,87,34,87), D=c(76,34,98,23))  
        
        mRNA
        #>    A   B   C  D  E   F
        #> 1 25  56  45 13 17 256
        #> 2 76  89 456 65 18  34
        #> 3 23  12 243 23 19   0
        #> 4 45 452   5 16 20   5
        RPPA
        #>    B  A  D
        #> 1 46 51 76
        #> 2 47 87 34
        #> 3 45 34 98
        #> 4 49 87 23
        mRNA[, names(RPPA)]
        #>     B  A  D
        #> 1  56 25 13
        #> 2  89 76 65
        #> 3  12 23 23
        #> 4 452 45 16
        

        【讨论】:

        • 这个答案和我的有什么不同?
        • 感谢您的快速回复。实际上,这两个答案都不是我想要的。当我在做 akrun 的回答时,RPPA 数据框中的所有值都变成了 NA。当我做 Titolondon 的回答时,我再次收到上述错误(选择了未定义的列)。
        • @deborah 根据您提供的示例,我无法重现您的 NA。正如你所展示的,我得到了预期的输出
        • @akrun mRNA 和 RPPA 的行名不同。会不会是这个原因?
        • @deborah 请尝试您仅发布的示例中的代码
        猜你喜欢
        • 1970-01-01
        • 2018-11-13
        • 2017-04-18
        • 1970-01-01
        • 1970-01-01
        • 2023-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多