我正在尝试将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')
答案 0 :(得分:0)
有几种方法可以做到这一点:
基本R:
merge(my_list, matt_list, by = 'genus', all.x = T)
plyr:
join(my_list, matt_list, by = 'genus', type = 'left')
dplyr:
left_join(my_list, matt_list, by = 'genus')
我个人尽可能使用基数R,但是plyr
不会重新排列行,这很好。
编辑:
您可以删除by
参数以根据所有匹配的列名称进行匹配,也可以使用by = c('genus', 'other_col')
等添加其他列以进行联接