【发布时间】:2020-05-23 04:37:39
【问题描述】:
我正在尝试将 R 中的两个电子表格(CSV 文件)合并在一起,条件有些复杂。每个数据文件都包含一个海洋物种列表和分类生态分配(以分配数字的形式,1-6)。查看所有列标题的图片。
这两个文件是:
my_data.csv
matt_data.csv
我想通过属名(两个电子表格中的列标题)来匹配它们。如果属名匹配,我想将数据合并在一起。
特殊条件:
1) 如果属名不匹配,并且它在 matt_data 但不在 my_data 中,我希望丢弃与该属相关联的行。 my_data 仅包含当前存在的物种,而 matt_data 包含一些已灭绝的物种,我只想要当前存在的物种。如果属名不匹配并且它在 my_data 但不在 matt_data 中,我希望不要删除该行。
2) matt_data 中的给定属可能匹配 my_data 中的多行,因为 matt_data 仅被分类到属级别,而 my_data 被分类到物种名称。我希望 matt_data 与它们共有的所有属相匹配。例如,假设 homo 是 matt_data 中的一个属(只有 1 行),而我在 my_data 中有 10 个均属,我希望 matt_data 行中的信息能与 my_data 中的所有 10 个均属相匹配。
如果其中任何一个没有意义,请告诉我,我可以澄清更多。
我之前使用了一个代码来合并一组不同的电子表格(复制如下),但在这种情况下它不起作用。另外我不相信这段代码不能正确处理我的特殊情况?
setwd("C:/Users/TrevorB/Documents/My Documents/Academics/TCBES/Thesis/IUCN WoRMS")
my_list = read.csv("C:/Users/TrevorB/Documents/My Documents/Spreadsheet Ecological Assignment.csv", header=T)
matt_list = read.csv("C:/Users/TrevorB/Documents/My Documents/matt_data.csv", header=T)
my_list$matt_list <- matt_list$category[match(my_list$genus, matt_list$genus)]
write.csv(my_list, file = 'combined.csv')
【问题讨论】:
-
您的描述是左连接。你可以通过几种不同的方式做到这一点,但最简单的可能是使用 dplyr 包:
left_join(my_list, matt_list, by = "genus") -
请不要发布代码/数据/错误的图像:它不能被复制或搜索 (SEO),它会破坏屏幕阅读器,并且它可能不适合某些移动设备。参考:meta.stackoverflow.com/a/285557/3358272(和xkcd.com/2116)。请直接包含代码或数据(例如,
dput(head(x))或data.frame(...))。 -
使用base R 你可以使用
merge(my_list, matt_list, by = 'genus', all.x = T)
标签: r csv merge conditional-statements spreadsheet