我需要为我拥有的 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"
参数。