我在R中有两个数据集,如下面的数据集1和数据集2所示。考虑数据集1中的'company'列。我想遍历数据集2中的每一行以查找该公司是否存在,以及是否存在然后将格式从数据集2复制到数据集1格式字段(当前为NA)。谢谢。如何通过R中的csv单元循环?
数据集1
数据集2
实施MIFF的溶液后dataset1_updated
我在R中有两个数据集,如下面的数据集1和数据集2所示。考虑数据集1中的'company'列。我想遍历数据集2中的每一行以查找该公司是否存在,以及是否存在然后将格式从数据集2复制到数据集1格式字段(当前为NA)。谢谢。如何通过R中的csv单元循环?
数据集1
数据集2
实施MIFF的溶液后dataset1_updated
你想这两个数据集连接在一起的。 data.table
真的很擅长这个。
library(data.table)
setDT(dataset1)
setDT(dataset2)
setkey(dataset1, company)
setkey(dataset2, company)
dataset2[dataset1[, .(fname, lname, email, company)]]
左外联接
左外部连接的结果(或简称为左 加入)为表A和B总是包含的所有行“左“表 (A),即使连接条件未在 ”右“表(B)中找到任何匹配行。这意味着如果ON子句与B中的0(零) 行(对于A中的给定行)匹配,则连接仍将返回结果(对于该行) 中的行 - 但B中每列中的NULL 。左边的 外部联接返回所有来自内部联接的值以及左表中与右表不匹配的所有值,其中 与NULL表(不包括链接列中的NULL(空)值)。
在这里,我们留在加入数据集1 dataset2。我们保留来自数据集1的所有行,并且如果来自数据集1的公司匹配来自数据集2的公司,则加入数据集2。如果匹配,我们保留数据集2的行并添加它,包括格式字段。如果不匹配,我们会得到NA
。
这似乎是为合并的一个经典案例,例如:
#Get rid of the existing format column
dataset1 <- dataset1[,names(dataset1 != "format")
#merge
dataset1_updated <- merge(dataset1, dataset2[,c("company","format")], all.x=TRUE)
未测试由于缺乏示例数据
您可以制作一些显示问题的虚拟数据,而无需通过审查过程。你也可以做到这一点,所以我们可以剪切和粘贴来为我们提供数据。请参阅https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – Spacedman
@Spacedman抱歉,我会用一些虚拟数据编辑我的问题。 – novice
我和@Miff的答案都为您的问题提供了解决方案。你有没有尝试过其中之一? – JAD