我需要为我拥有的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数据帧
感谢您的帮助
答案 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()
参数。