【问题标题】:take variance of a column from multiple csv files从多个 csv 文件中获取列的方差
【发布时间】:2018-04-15 19:42:58
【问题描述】:

我需要为我拥有的 50 个 csv 文件中的每一个取第三列,并在 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 的数据框

感谢您的帮助

【问题讨论】:

  • 使用var(t[-1,3]) 计算没有第一行的第三列的方差。使用sub('.csv', '', x) 从文件名中删除“.csv”。
  • 谢谢,但如何在每次迭代时附加一列?
  • 尝试将as.data.frame应用于lapply的输出
  • @YunTaeHwang:请参阅此答案以获取提示stackoverflow.com/questions/3397885/…

标签: r csv dataframe


【解决方案1】:

这是一个使用来自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" 参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2021-06-24
    • 1970-01-01
    相关资源
    最近更新 更多