如何将另一个数据框中的列添加到我自己的由 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 列的问题(可能是额外的空格或行中的某些内容)阻止了匹配的发生。
我是 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 列的问题(可能是额外的空格或行中的某些内容)阻止了匹配的发生。