r语言 - 从多个 CSV 文件中获取列的方差



我需要为我拥有的 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 的数据框

谢谢你的帮助

这是一个完整的工作示例,使用 pokemondb.net 的神奇宝贝统计数据。我们将下载数据,提取到 8 个 csv 文件的文件夹中(前 8 代神奇宝贝中的每一个文件一个(,然后读取每个文件,子集化到第 8 列和第 2 - N 行。

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

    download.file("https://raw.githubusercontent.com/lgreski/pokemonData/master/PokemonData.zip",
               "pokemonData.zip",
               method="curl",mode="wb")
unzip("pokemonData.zip",exdir="./pokemonData")
thePokemonFiles <- list.files("./pokemonData",
                              full.names=TRUE)
varianceList <- lapply(thePokemonFiles,function(x) {
     # read data and subset to 8th column, drop first row
     data <- read.csv(x)[-1,8]
     var(data,na.rm=TRUE)
     })
# unlist to combine into a vector
unlist(varianceList)

。和输出:

> unlist(varianceList)
[1]  716.7932  812.0668  968.6125  915.8592  934.8132 1607.4362 1049.9671
[8] 1016.2672

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

最新更新