2017-07-06 32 views
-4

我在R中有两个数据集,如下面的数据集1和数据集2所示。考虑数据集1中的'company'列。我想遍历数据集2中的每一行以查找该公司是否存在,以及是否存在然后将格式从数据集2复制到数据集1格式字段(当前为NA)。谢谢。如何通过R中的csv单元循环?

数据集1

enter image description here

数据集2

enter image description here

实施MIFF的溶液后dataset1_updated

enter image description here

+1

您可以制作一些显示问题的虚拟数据,而无需通过审查过程。你也可以做到这一点,所以我们可以剪切和粘贴来为我们提供数据。请参阅https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – Spacedman

+0

@Spacedman抱歉,我会用一些虚拟数据编辑我的问题。 – novice

+0

我和@Miff的答案都为您的问题提供了解决方案。你有没有尝试过其中之一? – JAD

回答

1

你想这两个数据集连接在一起的。 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(空)值)。

Wikipedia.

在这里,我们留在加入数据集1 dataset2。我们保留来自数据集1的所有行,并且如果来自数据集1的公司匹配来自数据集2的公司,则加入数据集2。如果匹配,我们保留数据集2的行并添加它,包括格式字段。如果不匹配,我们会得到NA

+0

Hi Jarko!数据集1中给定的公司字段可能存在或不存在于数据集2中,并且没有特定的顺序。例如,让我们将公司放在Dataset1的第1行。我需要遍历Dataset2中的每一行来查找该公司是否存在,如果是,则获取其格式(例如first.last)并将其输入到行1格式字段中。 – novice

+0

@novice我知道。那是什么呢。或者至少应该这样做。 – JAD

+0

@novice看到我正在发生什么的解释。 – JAD

1

这似乎是为合并的一个经典案例,例如:

#Get rid of the existing format column 
dataset1 <- dataset1[,names(dataset1 != "format") 

#merge 
dataset1_updated <- merge(dataset1, dataset2[,c("company","format")], all.x=TRUE) 

未测试由于缺乏示例数据

+0

嗨米夫!数据集1中给定的公司字段可能存在或不存在于数据集2中,并且没有特定的顺序。例如,让我们将公司放在Dataset1的第1行。我需要遍历Dataset2中的每一行来查找该公司是否存在,如果是,则获取其格式(例如first.last)并将其输入到行1格式字段中。 – novice

+0

@novice是的,这就是合并。即使数据集2中没有匹配,“all.x”参数也表示保留数据集1的所有行。试试看,或者用'?merge'查看帮助文件(你也可以尝试'sort = FALSE'参数) – Miff