R 按组获取多个时间序列的趋势线斜率
我有一个数据集,包含不同组的多个长格式时间序列。 我需要得到每个组的趋势线斜率,这样我就可以知道序列是在增加还是在减少 我的df看起来像这样:R 按组获取多个时间序列的趋势线斜率,r,time,series,trend,trendline,R,Time,Series,Trend,Trendline,我有一个数据集,包含不同组的多个长格式时间序列。 我需要得到每个组的趋势线斜率,这样我就可以知道序列是在增加还是在减少 我的df看起来像这样: Group Date (M-YY) Value Group A mar-18 0.733412181 Group A abr-18 0.698969331 Group A may-18 0.607338572 Group A jun-18 0.143834025 Group A jul-18 0.036449478 Group A ago-
Group Date (M-YY) Value
Group A mar-18 0.733412181
Group A abr-18 0.698969331
Group A may-18 0.607338572
Group A jun-18 0.143834025
Group A jul-18 0.036449478
Group A ago-18 0.115030334
Group A sept-18 0.292299769
Group A oct-18 0.940266543
Group A nov-18 0.838158609
Group A dic-18 0.467750831
Group B mar-18 0.466147825
Group B abr-18 0.670841589
Group B may-18 0.605945948
Group B jun-18 0.492835505
Group B jul-18 0.840924612
Group B ago-18 0.70177121
Group B sept-18 0.377545249
Group B oct-18 0.968598222
Group B nov-18 0.480427212
Group B dic-18 0.681482744
要获取每个组的坡度,请执行以下操作:
summary(lm(Value~Date,df[df$Group==“A”,]))
汇总(lm(价值~日期,df[df$Group==“B”,]))
要绘图:
绘图(df$日期,df$值)
abline(lm(Value~Date,df[df$Group==“A”,]),col=“blue”)
abline(lm(Value~Date,df[df$Group==“B”,]),col=“red”)
使用tidyverse
的解决方案:
df%>%
分组依据(分组)%>%
do(浏览(lm(值~日期,数据=))
这个怎么样
#subset data
groupA = subset.data.frame(data, Group =="Group A")
#plot data
plot(groupA$Date, groupA$Value)
abline(lm(Value ~ 1:length(groupA$Date))
对于B组,您也可以重复上述操作如果您按组列分组,然后添加行数()列,您可以对每个组的值与行数字段进行线性回归,并使用摘要选择斜率系数
library(dplyr)
df %>%
group_by(Group) %>%
mutate(rownum = row_number()) %>%
summarise(slope = lm(Value ~ rownum)$coefficients['rownum'])
# # A tibble: 2 x 2
# Group slope
# <chr> <dbl>
# 1 Group_A 0.00468
# 2 Group_B 0.0117
你能提供你的代码而不是输出吗?你的例子是可复制的
structure(list(Group = c("Group_A", "Group_A", "Group_A", "Group_A",
"Group_A", "Group_A", "Group_A", "Group_A", "Group_A", "Group_A",
"Group_B", "Group_B", "Group_B", "Group_B", "Group_B", "Group_B",
"Group_B", "Group_B", "Group_B", "Group_B"), Date = c("mar-18",
"abr-18", "may-18", "jun-18", "jul-18", "ago-18", "sept-18",
"oct-18", "nov-18", "dic-18", "mar-18", "abr-18", "may-18", "jun-18",
"jul-18", "ago-18", "sept-18", "oct-18", "nov-18", "dic-18"),
Value = c(0.733412181, 0.698969331, 0.607338572, 0.143834025,
0.036449478, 0.115030334, 0.292299769, 0.940266543, 0.838158609,
0.467750831, 0.466147825, 0.670841589, 0.605945948, 0.492835505,
0.840924612, 0.70177121, 0.377545249, 0.968598222, 0.480427212,
0.681482744)), row.names = c(NA, -20L), class = "data.frame")