让我分享这个示例,它应该让您了解使用基本 R 的步骤。
首先,让我们创建这两个数据框。 (list 在 R 中有所不同。)
list11 <- data.frame(id = c(1, 2, 3),
category = "Category11",
colour = "red")
list10 <- data.frame(id = c(1, 2, 4),
category = "Category10",
colour = "blue")
这会导致:
> list11
id category colour
1 1 Category11 red
2 2 Category11 red
3 3 Category11 red
> list10
id category colour
1 1 Category10 blue
2 2 Category10 blue
3 4 Category10 blue
接下来,您可以通过 ID 连接两个数据框:
joined <- merge(x = list10, y = list11, by = "id", all = TRUE)
这会给你:
> joined
id category.x colour.x category.y colour.y
1 1 Category10 blue Category11 red
2 2 Category10 blue Category11 red
3 3 <NA> <NA> Category11 red
4 4 Category10 blue <NA> <NA>
我们的想法是我们采用 x 列中存在的所有内容。只有当什么都没有时(=<NA>),我们才检查 y 列。这就是我们使用is.na()function 所做的:
new10 <- joined[!is.na(joined$category.x), c("id", "category.x", "colour.x")]
new11 <- joined[is.na(joined$category.x), c("id", "category.y", "colour.y")]
> new10
id category.x colour.x
1 1 Category10 blue
2 2 Category10 blue
4 4 Category10 blue
> new11
id category.y colour.y
3 3 Category11 red
上面的merge 函数为我们提供了新的列名,所以我们必须重新设置它们:
colnames(new10) <- c("id", "category", "colour")
colnames(new11) <- c("id", "category", "colour")
现在两个数据框都有相同的列名,我们可以使用:
> final <- rbind(new10, new11)
> final
id category colour
1 1 Category10 blue
2 2 Category10 blue
4 4 Category10 blue
3 3 Category11 red
如果我们想这样做,我们终于可以排序了:
> final <- final[order(final$id), ]
> final
id category colour
1 1 Category10 blue
2 2 Category10 blue
3 3 Category11 red
4 4 Category10 blue
要处理所有 XLS,您可以围绕它创建一个循环,或者使用数据框列表和 apply 覆盖它。