lapply到csv文件的一列

时间:2015-03-28 05:55:28

标签: r lapply

我有一个包含数百csv个文件的文件夹。我想使用lappply来计算每个csv文件中一列的平均值,并将该值保存到一个新的csv文件中,该文件将包含两列:第1列将是原始文件的名称。第2列将是原始文件中所选字段的平均值。这是我到目前为止所做的:

setwd("C:/~~~~")
list.files()
filenames <- list.files()
read_csv <- lapply(filenames, read.csv, header = TRUE)
dataset <- lapply(filenames[1], mean)
write.csv(dataset, file = "Expected_Value.csv")

提供错误消息:

  

警告消息:在mean.default(“2pt.csv”[[1L]],...)中:参数不是数字或逻辑:返回NA

所以我认为我有两个(至少)问题是我无法弄清楚的。

首先,为什么不认识第1列是数字?我加倍,三重检查了csv文件,我确定这个列是数字的。

其次,如何让输出文件按照我上面描述的方式返回两列?我还没有完成第二部分。

我想先让第一部分工作。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

我没有使用lapply但是做了类似的事情。希望这有帮助!

    i= 1:2 ##modify as per need

    ##create empty dataframe
    df <- NULL 

    ##list directory from where all files are to be read
    directory <- ("C:/mydir/")

    ##read all file names from directory
    x <- as.character(list.files(directory,,pattern='csv'))
    xpath <- paste(directory, x, sep="")

    ##For loop to read each file and save metric and file name 
    for(i in i) 
    {
    file <- read.csv(xpath[i], header=T, sep=",")
    first_col <- file[,1]
    d<-NULL
   d$mean <- mean(first_col)
   d$filename=x[i]
   df <- rbind(df,d)
    }

   ###write all output to csv
   write.csv(df, file = "C:/mydir/final.csv")

   CSV file looks like below 

    mean        filename
   1999.000661  hist_03082015.csv
   1999.035121  hist_03092015.csv

答案 1 :(得分:0)

感谢您的两个答案。经过多次审查后发现,有一种更容易实现目标的方法。我拥有的csv个文件最初位于一个文件中。我按位置将它们分成多个文件。当时,我认为有必要对每种类型计算mean。显然,这是一个错误。我转到原始文件并使用aggregate。代码:

setwd("C:/~~")
allshots <- read.csv("All_Shots.csv", header=TRUE)
EV <- aggregate(allshots$points, list(Location = allshots$Loc), mean)
write.csv(EV, file= "EV_location.csv")

这是一个简单的解决方案。再次感谢或回答。对于未来的项目,我需要在lapply变得更好,这样他们就不会浪费时间。