识别两个数据帧中的相同列并在r中提取它们

时间:2017-01-15 17:28:50

标签: r dataframe

我有两个数据框; mRNAhere)和RPPAhere)。 mRNA数据框有1,212列,而RPPA数据框有937列。 RPPA数据框中的所有列名称也会出现在mRNA数据框中(但顺序不同)。在列中,两个数据帧之间的值不同 我想创建一个new mRNA数据框,其中包含与RPPA数据框相同的列,不会包含未显示在(& #34;旧")mRNA数据框 一个例子:

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列名转换为向量,而不是像命令here那样使用命令mRNA[col.names.vector],但它不起作用。它给出了错误undefined columns selected

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

4 个答案:

答案 0 :(得分:1)

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

col_name=colnames(mRNA[which(!(colnames(mRNA) %in% colnames(RPPA)))])

new_mRNA=mRNA %>% select(-col_name)

答案 1 :(得分:0)

我们可以将mRNA按“RPPA”的列名进行分组,并将其分配给“RPPA”

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

答案 2 :(得分:0)

带有向量的data.frame的子集应该有效。

  1. 创建要保留的列名称的向量
  2. 使用此向量为您设置data.frame

  3. 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
    

答案 3 :(得分:0)

发布的两个答案对我的数据都不起作用。多亏了这两个答案,并进行了一些研究,我想出了答案: 首先,您需要生成一个向量,该向量仅包含出现在BOTH数据框中的列名。为此,我使用了命令intersectReduce

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

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

new.mRNA <- mRNA[target]

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