我有数千个.csv
个文件,包含年份和HS信息,如下所示:
Year HS
1956 1.06
1956 1.07
....
2012 0.95
每个csv文件代表不同的位置。 我应该做的是:
.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个小时哈哈哈。所以,我意识到我可能正在写低效的脚本。如果有人也想提出更好的剧本,我会很高兴。
答案 0 :(得分:0)
获取文件名files
,在提供数据框列表{@ 1}}时阅读它们,并将L
应用于每个文件。 aggregate
将是汇总数据框的列表。
Ag
或者如果您不需要或者不能将L最后两行合并到:
files <- Sys.glob("*.csv")
L <- lapply(files, read.table, header = TRUE, sep = ";")
Ag <- lapply(L, aggregate, formula = HS ~ Year, FUN = max)