循环使用聚合函数

时间:2014-07-28 11:23:59

标签: r for-loop aggregate-functions

我有一个数据帧,df =(Var1,Day,Month,Years)。我需要对每年的数据进行显着性检验。但是需要传递给函数的参数(在本例中是一个重要性测试)在另一个数据框中。我使用以下代码,但我没有得到正确的结果。 [其中param1和param2是每年参数的载体]

for (i in (no.of.years))    
{
  result_stat <- aggregate(Var1~YY,df,function(X)ks.test(X,'pgamma',shape = param1[i], rate = param2[i]))
} 

你能不能让我知道我的for循环有什么问题?当没有循环单独执行相同的步骤[即,手动获取每年数据并传递参数param1和param2硬编码]时,我得到一组不同的结果。

1 个答案:

答案 0 :(得分:0)

我认为您的问题是您在整个数据上运行aggregate而不是给定年份的子集。由于您没有提供有关数据的更多信息,我将假设它看起来像这样

df 
#       Var1   YY Month Day
#   7.896072 2000     1   1
#  11.881620 2000     2   2
#  12.315676 2000     3   3
#   7.459200 2010     1  10
#  10.944619 2010     2  11
#  11.371278 2010     3  12

,您的参数位于另一个数据框中,如您所说

params
#  YY   param1 param2
#  2000      1    0.1
#  2010      2    0.2

由于您多年来一直在运行for循环,因此您不需要aggregate;只需每年使用df的子集

years <- unique(df$YY)
result_stat <- vector("list", length(years))
names(result_stat) <- years
for (i in seq_along(years)) {
    y <- years[[i]]
    result_stat[[i]] <- ks.test(df[df$YY == y, ]$Var1, "pgamma", 
        shape = params[params$YY == y, ]$param1,
        rate = params[params$YY == y, ]$param2)
}