2017-06-06 60 views
0

我有成千上万的.csv文件由年和它看起来像这样HS的信息:如何在R中一次对每个数据帧执行聚合?

Year HS 
1956 1.06 
1956 1.07 
.... 
2012 0.95 

每个CSV文件代表不同的位置。 我应该做的是:

  1. 查找到的最大HS每年对每个文件
  2. 创造数千个独立.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 

我尝试使用数据列表(alt霍夫我还没有真正理解)和写这个剧本:

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 

我不认为有一个与输入的任何问题,因为它是当我执行aggregatewrite.csv到单个数据帧(没有循环)时工作。 有没有对这个问题的建议?

谢谢。

无论如何,我是新来的R.喜欢......字面上新的,不到30小时hahaha。所以,我意识到我可能正在编写低效的脚本。如果有人也想提出更好的剧本,我会很高兴。

回答

0

获取文件名files,在给出数据帧列表中读取它们,L,并将aggregate应用于每个文件名。 Ag将是聚合数据框的列表。

files <- Sys.glob("*.csv") 
L <- lapply(files, read.table, header = TRUE, sep = ";") 
Ag <- lapply(L, aggregate, formula = HS ~ Year, FUN = max) 

,或者如果你不需要或者买不起存储大号conbine的最后两行:

Ag <- lapply(files, 
function(f) aggregate(HS ~ Year, read.table(f, header = TRUE, sep = ";"), max)) 
+0

它说: '错误FUN(X [我] ,...): 只在数据帧中定义了所有数字变量# 老实说,'read.csv'似乎对我的数据不起作用。以前我用'read'输入我的csv文件。csv',它存储到1个变量,即使对于单个数据帧,我也无法执行聚合。 – Yosinta

+0

在代码中的read.table命令可以工作的前提下,我已将其更改为read.table。 –

+0

非常感谢!它完美的工作〜 – Yosinta