请帮我编写一个代码,在R中使用所有文件中的公共字段组合多个csv文件(但每个文件都有不同的行,如702,666等),对于缺少的值,我需要NA代替缺失值。
为了便于理解,我在这里展示了单个文件的外观,因为在这里我无法附加多个文件。我只是粘贴一个。 名称是所有文件中的常见文件。使用文件名作为其标题及其列名。
name projected_leaf_area treatment species g_alias replicates
1 A-2:1 215.209 WW Chickpea ICCRIL03-0013 2
2 A-2:2 148.404 WW Chickpea ICCRIL03-0119 2
3 A-2:3 206.566 WW Chickpea ICCRIL03-0007 2
. .. . . . ... ........ ......
. .. . . . ... ........ ......
702 B-2:234 242.06 WW Chickpea ICCRIL03-0143 4
请帮我合并文件朋友...感谢您的时间......
答案 0 :(得分:0)
使用read.csv
将merge
和Reduce
加在一起加载所有文件:
files <- dir(pattern = ".csv")
d <- lapply(files, read.csv, stringsAsFactors = FALSE)
for(i in seq_along(d)) {
names(d[[i]]) <- paste0(files[i], ".", names(d[[i]]))
}
Reduce(function(x,y) merge(x,y,by="name", all=TRUE, sort = FALSE), d)
答案 1 :(得分:0)
file.data <- lapply(file.names, function(fn){read.csv(fn)})
common.cols <- Reduce('intersect', lapply(file.data, colnames))
do.call('rbind', lapply(file.data, function(fd) fd[, common.cols]))
#
忽略上述内容 尝试
mergeall <- function(x, y){merge(x, y, all = TRUE)}
file.data <- lapply(file.names, function(fn){read.csv(fn)})
# example data:
# file.data[[1]] <- data.frame(id = letters[1:4], val1 = 1:4)
# file.data[[2]] <- data.frame(id = letters[1:3], val2 = c(1, NA, 2))
# file.data[[3]] <- data.frame(id = letters[2:5], val3 = factor(letters[1:4]))
Reduce('mergeall', file.data)
# id val1 val2 val3
# 1 a 1 1 <NA>
# 2 b 2 NA a
# 3 c 3 2 b
# 4 d 4 NA c
# 5 e NA NA d