R-将两个有特殊条件的电子表格合并在一起

时间:2020-02-07 03:31:25

标签: r csv merge conditional-statements spreadsheet

我正在尝试将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')

1 个答案:

答案 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')等添加其他列以进行联接

相关问题