我有一个数据帧,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硬编码]时,我得到一组不同的结果。
答案 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)
}