我是一名使用年度时间序列数据集的R新手(名为" timeseries")。该集合具有一年的列和另外600列具有不同位置的年度值(" L1,"" L2"等),例如,类似于以下内容:
Year L1 L2 L3 L4
1963 0.63 0.23 1.33 1.41
1964 1.15 0.68 0.21 0.4
1965 1.08 1.06 1.14 0.83
1966 1.69 1.85 1.3 0.76
1967 0.77 0.62 0.44 0.96
我想对每个网站进行线性回归,并且可以将以下内容用于单个网站:
timeL1<-lm(L1~Year, data=timeseries)
summary(timeL1)
但我认为必须有一种方法可以自动为所有位置重复此操作。理想情况下,我希望最终得到两个结果向量 - 一个包含所有位置的系数,另一个包含所有位置的p值。从一些搜索中,我认为plyr包可能有效,但我无法弄明白。我还在学习R的基础知识,所以任何建议都会受到赞赏。
答案 0 :(得分:3)
您可以使用一行代码执行此操作:
apply(df[-1], 2, function(x) summary(lm(x ~ df$Year))$coef[1,c(1,4)])
L1 L2 L3 L4
Estimate -160.0660000 -382.2870000 136.4690000 106.9820000
Pr(>|t|) 0.6069965 0.3886881 0.7340981 0.7030296
答案 1 :(得分:0)
apply
和lapply
的组合可以实现此目的。
d <- read.table(text="Year L1 L2 L3 L4
1963 0.63 0.23 1.33 1.41
1964 1.15 0.68 0.21 0.4
1965 1.08 1.06 1.14 0.83
1966 1.69 1.85 1.3 0.76
1967 0.77 0.62 0.44 0.96", header=TRUE)
year <- d$Year
d <- d[,-1]
models<-apply(d, 2, function(x) lm(x ~ year))
summaries <- lapply(models, summary)
pvals <- lapply(lapply(summaries, coefficients), function(x) x[4])
coefs <- lapply(lapply(summaries, coefficients), function(x) x[1])