我有两个数据框; mRNA
(here)和RPPA
(here)。 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
。
有没有快速的方法(没有函数,循环等)?
答案 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的子集应该有效。
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数据框中的列名。为此,我使用了命令intersect
和Reduce
:
target <- Reduce(intersect, list(colnames(raw.mRNA), colnames(RPPA)))
现在你可以使用给出的答案:
new.mRNA <- mRNA[target]
这将生成一个具有正确值的新数据框 感谢@akrun和@Titolondon的帮助