【发布时间】:2017-11-07 15:59:46
【问题描述】:
我有数千个 .csv 文件,其中包含年份和 HS 信息,如下所示:
Year HS
1956 1.06
1956 1.07
....
2012 0.95
每个 csv 文件代表不同的位置。 我应该做的是:
- 找到每个文件每年的最大 HS
- 创建数千个单独的
.csv文件,其中包含第 1 点的信息
所以,基本上我对每个文件重复相同的任务。
但是,在将所有文件输入到名称为 df1,df2,df3... 的数据框后,我坚持为每个数据框执行 aggregate(无法循环遍历数据框)。我不知道如何“调用”数据框:
temp = list.files(pattern="*.csv")
for (i in 1:length(temp)) {
assign(paste0("df",i),
read.table(temp[i],header=TRUE,sep=";"))
}
for (i in 1:length(temp))
{
assign(paste0("ag",i),
aggregate(HS~Year,data=df(i),max))
}
我使用那些脚本,它显示:
Error in df[i] : object of type 'closure' is not subsettable
那我改成:
temp = list.files(pattern="*.csv")
for (i in 1:length(temp)) {
assign(paste0("df",i),
read.table(temp[i],header=TRUE,sep=";"))
}
for (i in 1:length(temp))
{
assign(paste0("ag",i),
aggregate(HS~Year,data=df(i),max))
}
它显示:
Error in df(i) : argument "df1" is missing, with no default
我尝试使用数据列表(虽然我还没有真正理解)并编写此脚本:
temp = list.files(pattern="*.csv")
for (i in 1:length(temp)) {
assign(paste0("df",i),
read.table(temp[i],header=TRUE,sep=";"))
}
dfl=mget(ls(pattern="df[1-length(temp)]"))
for (i in 1:length(dfl)){
assign(paste0("ag",i),
aggregate(HS~Year,data=dfl[i],max))
}
但它不起作用并显示:
Error in eval(predvars, data, env) : object 'HS' not found
我认为输入没有任何问题,因为当我对单个数据帧执行aggregate 和write.csv(不循环)时它可以工作。
对这个问题有什么建议吗?
谢谢。
不管怎样,我是 R 的新手。就像……字面上是新的,不到 30 小时哈哈哈。所以,我意识到我可能正在编写低效的脚本。如果有人也想建议更好的脚本,我会很高兴。
【问题讨论】:
标签: r csv for-loop dataframe aggregate