如何将另一个数据框中的列添加到我自己的由 sample_id 联合的列?

How to add a column from another data frame to my own that are united by sample_id?

我是 R 的新手,想知道如何从 datasetA 添加一列到 datasetB,这些列由 sampleID 联合起来。

特别是数据集 A 具有个人姓名,而数据集 B 具有由 sampleID 指定的那些相同个人的年龄。 (即“我们通过数据集 A 中的 sampleID 001 认识一个名叫 Cat 的人,但他们的年龄在数据集 B 中)。

我如何在数据集 A 中创建一个名为“年龄”的新列,该列将具有与数据集 B 年龄相同的信息。下面可以看到 2 个数据集的示例

数据集A

sampleID Name
001 Cat
002 Dog
003 Pig
004 Cow
005 Duck

数据集B

sampleID Age
005 2
003 5
002 4
004 2
001 1

本质上,我想将数据集 B 中的年龄列添加到数据集 A(请记住,样本 ID 在数据集 B 中被打乱)

我自己尝试了一些解决方案,但没有任何效果

new_metadata <- merge(A, B, by = "sampleID")

这只是复制了所有样本。考虑到真实数据集有超过 300 列,手动添加年龄太麻烦了,尤其是考虑到 sampleID 到处都是乱码。

我尝试使用dpylr的mutate函数

 mutate(age = if_else(datasetB$age >= 0, datasetB$age, "no_age"))

但这没有用。是否有我缺少的功能可以轻松完成此操作?

我只需要为每个 sampleID 添加年龄(如果它们匹配)

让我知道这是否可行,因为这似乎是一个简单的操作。

如果您使用 data.table 存储示例,它会起作用。

DatasetA <- data.table(sampleID=c("001","002","003","004","005"),Name=c("Cat","Dog","Pig","Cow","Duck"))
DatasetB <- data.table(sampleID=c("005","003","002","004","001"),Age=c(2,5,4,2,1))
new_metadata <- merge(DatasetA, DatasetB, by = "sampleID")
new_metadata
   sampleID Name Age
1:      001  Cat   1
2:      002  Dog   4
3:      003  Pig   5
4:      004  Cow   2
5:      005 Duck   2

查看 str(DatasetA) 和 str(DatasetA) 以了解您如何存储数据。可能是 sampleID 列的问题(可能是额外的空格或行中的某些内容)阻止了匹配的发生。