合并不同大小的多个csv文件

时间:2015-02-23 10:22:53

标签: r csv

请帮我编写一个代码,在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

请帮我合并文件朋友...感谢您的时间......

2 个答案:

答案 0 :(得分:0)

使用read.csvmergeReduce加在一起加载所有文件:

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