【问题标题】:Read multiple csvs in loop and write as columns in a master csv循环读取多个 csv 并作为主 csv 中的列写入
【发布时间】:2018-03-29 01:14:54
【问题描述】:

假设我有两个.csv 表(我实际上有数百个):

Table 1
x     mean_snowcover    useless_data 
1     80                6546156
2     50                6285465
3     60                2859525

Table 2
x    mean_snowcover    useless_data
1    91                87178
2    89                987189
3    88                879278927

我想要一个如下所示的新表:

Mean Snowcover
x    Table_1    Table_2
1    80         91
2    50         89
3    60         88

这是我当前的代码:

setwd("C:/Users/evan/Desktop/Finished Data SGMA/test")

master1=read.csv("New folder/AllSGMA.csv")

temp = list.files(pattern="*.csv$",recursive=FALSE)

###READ CSVS IN LOOP###
for(x in 1:length(temp)){
    mycsv = read.csv(temp[x])
    mean_snowcover=mycsv$mean_snowcover
    master2=cbind(master1,mean_snowcover)
}

write.csv(master2,"Mean Snowcover.csv")

但输出是一个空白表。我已经查看了有关堆栈溢出的类似问题,但我无法弄清楚我需要更改什么。我对 R 还很陌生。

【问题讨论】:

    标签: r loops csv


    【解决方案1】:

    您可以使用Reducedplyr::left_join

    df1 <- read.table(text =
        "x     mean_snowcover    useless_data
    1     80                6546156
    2     50                6285465
    3     60                2859525", header = T)
    
    df2 <- read.table(text =
        "x    mean_snowcover    useless_data
    1    91                87178
    2    89                987189
    3    88                879278927", header = T)
    
    library(dplyr);
    library(magrittr);
    Reduce(function(x,y)
        left_join(x, y, by = "x") %>% select(x, contains("snowcover")), list(df1, df2))
    #    x mean_snowcover.x mean_snowcover.y
    #  1 1               80               91
    #  2 2               50               89
    #  3 3               60               88
    

    这适用于任意数量的data.frames,只要它们共享一个共同的x 列,并且您将它们全部放在list 中,即

    lst <- list(df1, df2, df3, ....)
    Reduce(function(x,y)
        left_join(x, y, by = "x") %>% select(x, contains("snowcover")), lst)
    

    【讨论】:

    • 我正在寻找适用于数百个 csv 的东西,因此我不必手动读取每个文件。有什么想法吗?
    • @J.W.Powell 查看我的回答。将它们全部放在list 中,仅此而已。
    • data.frames 应该已经在 list 中,如果您使用类似于 lst &lt;- lapply(csv_file_names, read.csv) 的内容阅读它们。
    • 我应该更仔细地阅读您的问题;最好避免for 循环并使用lapply(temp, read.csv) 来读取文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 2013-08-28
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 2015-05-23
    相关资源
    最近更新 更多