【问题标题】:How to loop through csv cells in R? [closed]如何循环遍历R中的csv单元格? [关闭]
【发布时间】:2017-07-06 11:21:27
【问题描述】:

如下所示,我在 R 中有两个数据集,数据集 1 和数据集 2。考虑数据集 1 中的“公司”列。我想遍历数据集 2 中的每一行以查找该公司是否存在,以及是否存在确实如此,然后将格式从数据集 2 复制到数据集 1 格式字段(当前为 NA)。谢谢。

数据集 1

数据集 2

实施 Miff 解决方案后的 dataset1_updated

【问题讨论】:

  • 您可以制作一些显示问题的虚拟数据,而无需经过审查过程。您也可以制作它,以便我们可以剪切和粘贴来为我们获取您的数据。见stackoverflow.com/questions/5963269/…
  • @Spacedman 对此感到抱歉,我将使用一些虚拟数据来编辑我的问题。
  • 我和@Miff 的回答都为您的问题提供了解决方案。您尝试过其中任何一个吗?
  • @Jarko Dubbeldam 现在重新实现它们。它早些时候没有工作,但很可能这是我这边的问题。感谢您的解决方案。你也是米夫。
  • 如果某个答案对您有帮助,请点赞和/或接受它。

标签: r csv


【解决方案1】:

您想将这两个数据集连接在一起。 data.table 真的很擅长这个。

library(data.table)

setDT(dataset1)
setDT(dataset2)

setkey(dataset1, company)
setkey(dataset2, company)

dataset2[dataset1[, .(fname, lname, email, company)]]

左连接

左外连接

左外连接的结果(或简单地左 join) 用于表 A 和 B 始终包含“左”表的所有行 (A),即使连接条件在 “右”表 (B)。这意味着如果 ON 子句匹配 0(零) B 中的行(对于 A 中的给定行),连接仍将返回 结果(对于该行)—但在 B 的每一列中都有 NULL。左 外连接返回内连接的所有值加上所有值 在与右表不匹配的左表中,包括行 链接列中有 NULL(空)值。

Wikipedia.

在这里,我们在 dataset1 上加入 dataset2。我们保留 dataset1 中的所有行,如果 dataset1 中的公司与 dataset2 中的公司匹配,则加入 dataset2。如果匹配,我们保留 dataset2 的行并添加它,包括格式字段。如果不匹配,我们会得到NA

【讨论】:

  • 嗨,Jarko!数据集 1 中的给定公司字段可能存在也可能不存在于数据集 2 中,并且没有特定顺序。例如,让我们以 Dataset1 的第 1 行中的公司为例。我需要遍历 Dataset2 中的每一行以查找该公司是否存在,如果存在,则获取其格式(例如 first.last)并将其输入到第 1 行格式字段中。
  • @novice 我知道。这就是这样做的。或者至少应该这样做。
  • @novice 看看我对发生了什么的解释。
  • @Miff 在他的回答中做了同样的事情,只是使用了不同的函数。
  • 大家好,我用虚拟数据更新了问题,以更简洁地解释我的问题。抱歉之前的歧义。
【解决方案2】:

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

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

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

由于缺少示例数据,未进行测试

【讨论】:

  • 嗨米夫!数据集 1 中的给定公司字段可能存在也可能不存在于数据集 2 中,并且没有特定顺序。例如,让我们以 Dataset1 的第 1 行中的公司为例。我需要遍历 Dataset2 中的每一行以查找该公司是否存在,如果存在,则获取其格式(例如 first.last)并将其输入到第 1 行格式字段中。
  • @novice 是的,这就是合并的作用。 all.x 参数表示保留 dataset1 的所有行,即使 dataset2 中没有匹配项也是如此。试试看,或者查看带有?merge 的帮助文件(您可能还想尝试sort=FALSE 参数)
猜你喜欢
  • 2021-06-28
  • 1970-01-01
  • 2015-11-20
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多