我想结合(合并)多个表中的选择列与以下组织 .
这里有两个数据集作为我想要组合的示例
"dataset1"
A B C D E F (header)
1 2 3 4 5 F1(1st row)
6 7 8 9 10 F2(2nd row)
11 12 13 14 15 F3 (3rd row)
....
"dataset2"
A B C D E F (header)
16 17 18 19 20 F1(1st row)
21 22 23 24 25 F2(2nd row)
26 27 28 29 30 F3 (3rd row)
....
这里,所有不同数据集的 Headers (我有超过100个数据集)是相同的,我想使用F列中的名称(F1,F2,F3 ......超过F200)作为唯一标识符 . 例如,如果我使用列F作为标识符组合来自所有不同数据集的列“A”,则结果应如下所示 . 另外,为了区分数据的来源,还需要将 Headers 更改为数据集ID .
dataset1 dataset2 F (header)
1 16 F1 (1st row)
6 21 F2 (2nd row)
11 26 F3 (3rd row)
....
请注意,我所有的数据集都包含不同的行数,因此可能缺少对应于F1~F200的某些数据点值 . 在这种情况下,我想把NA或留空 .
为此,我尝试了以下代码
x <- merge(dataset1, dataset2, by="F", all=T)
但是这样,我不能仅提取列A,而是合并外翻列 .
同样,我也试过了
x <- Reduce(function(x, y) merge(x, y, all=TRUE, by=("F")), list(dataset1, dataset2))
这给了我与之前的代码实际上相同的结果 . 为了使用此代码进一步仅提取列A,我尝试了一个,但没有奏效 .
x <- Reduce(function(x, y) merge(x, y, all=TRUE, by=("F")), list(dataset1[,1], dataset2[,1))
我不知道如何将 Headers 的名称更改为来自的数据集的名称 .
请理解我刚开始学习R基础知识 .
我正在使用RStudio 0.98507,目前所有数据集(超过数百个)都被加载并存在于“全球环境”中
非常感谢你!
1 回答
这是一个包含以下四个示例数据框的解决方案:
首先将它们组合成一个列表:
然后重命名除
F
列以外的所有列 . 这是因为稍后当我们将数据框合并在一起时,如果列都具有相同的名称,那么merge
将尝试通过将.x
或.y
添加到名称来区分它们 - 当您仅合并两个数据集时这很好,但两个以上的人会感到困惑 .这为我们提供了数据框,其列 Headers 如下所示:
然后使用
Reduce
:并选择所需的列,在这种情况下,列名称中包含
A
的所有列: