从多个csv文件中获取列的差异

时间:2018-04-15 19:42:59

标签: r csv dataframe

我需要为我拥有的50个csv文件中的每一个获取第3列,并在R中获得它们的差异。

files <- list.files(path="path\\to\\csv", pattern="*.csv", full.names=T, recursive=FALSE)

lapply(files, function(x) {
  t <- read.csv(x, header=F) # load file
  # apply function
  out <- var(t[3])

  out
  # write to file
  #write.csv(out, "path\\to\\dir\\variances.csv", sep="\t", quote=F, row.names=F, col.names=T)
})

这是我到目前为止所做的,我需要一些帮助,以便我可以使用每个csv文件的第2行到最后一行来获取差异,只需要第3列。

另外,如果我可以编写一个数据框,每个文件的名称没有“.csv”作为列名,它们的差异作为csv文件中的值。基本上它将是1x50数据帧

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

这是一个完整的工作示例,使用来自Kaggle.com的Alex Barradas的神奇宝贝统计数据库的数据。我们将下载数据,提取到6个csv文件的文件夹(前6代神奇宝贝各一个),然后读取每个文件,子集到第5列和2 - N行。

我们将计算每个列的方差,然后使用unlist()将统计数据合并到一个向量中。

download.file("https://raw.githubusercontent.com/lgreski/pokemonData/master/pokemonData.zip",
               "pokemonData.zip",
               method="curl",mode="wb")
unzip("pokemonData.zip")

thePokemonFiles <- list.files("./pokemonData",
                              full.names=TRUE)
varianceList <- lapply(thePokemonFiles,function(x) {
     # read data and subset to 5th column, drop first row
     data <- read.csv(x)[-1,5]
     var(data,na.rm=TRUE)
     })
# unlist to combine into a vector
unlist(varianceList)

...和输出:

> # unlist to combine into a vector
> unlist(varianceList)
[1] 13335.68 14468.51 18597.69 14245.38 11593.13 13186.59
在Windows上

注意:,在method="wininet"中使用download.file()参数。