R:由多列分组后的Dplyr滞后变量
我想在Year, State, Tier, Group
分组后计算score
差异。我的数据的程式化的表述看起来像:R:由多列分组后的Dplyr滞后变量
dat2 <- data.frame(
Year = sample(1990:1996, 10, replace = TRUE),
State = sample(c("AL", "CA", "NY"), 10, replace = TRUE),
Tier = sample(1:2),
Group = sample(c("A", "B"), 10, replace = TRUE),
Score = rnorm(10))
我试图用mutate
和group_by_
然而.dots
它获得从下一绝对值的值(即分组似乎不工作)。我最感兴趣的是绘制年度差异(ala时间序列,尽管某些年份会是NA
),所以这可以通过滞后或计算下一年的得分来解决。
编辑:因此,如果数据集的样子:
Year State Tier Group Score
1990 AL 1 A 75
1990 AL 2 A 100
1990 AL 1 B 5
1990 AL 2 B 10
1991 AL 1 A 95
1991 AL 2 A 80
1991 AL 1 B 5
1991 AL 2 B 15
期望的最终结果将是:
Year State Tier Group Score Diff
1991 AL 1 A 95 20
1991 AL 1 B 5 0
1991 AL 2 A 80 -20
1991 AL 2 B 15 5
如果我理解正确的,你想计算的差异Score
每个组合内Year, State, Tier, Group
?据推测,您的数据将按照时间顺序排序,以区别于任何意义。你举的例子是小,无法重复这些组合,但我相信你正在寻找的解决办法是:
library(dplyr)
dat2 %>%
arrange(Year) %>%
group_by(State, Tier, Group) %>%
mutate(ScoreDiff = Score - lag(Score))
根据您目前的代码中,ScoreDiff
列有很多NAs
,因为通常不会多在10个案例中,四个变量的组合相同。但你可以用一个更通用的代码来试一下(我也把1990年的开始年份改为1890年):
n <- 100
dat2 <- data.frame(
Year = sample(1890:1996, n, replace = TRUE),
State = sample(c("AL", "CA", "NY"), n, replace = TRUE),
Tier = sample(1:2),
Group = sample(c("A", "B"), n, replace = TRUE),
Score = rnorm(n))
dat2 %>%
arrange(Year) %>%
group_by(State, Tier, Group) %>%
mutate(ScoreDiff = Score - lag(Score))
你好,谢谢你的发帖。这大概是我认为会做的伎俩,它不适合我。当我运行较长时间的样本时,如果同一年份/州/级/组合有两个条目,它只会计算差异 - 所以它不会滞后于分数,但只能操作重复数据。 – rfsrc
你说得对。因为'Year'包含在分组中,它会查找包含相同'年份'的相同组合。我已经编辑了相应的答案,上面的代码现在应该产生你想要的结果。 – Constantinos
你能展示什么是期望的结果吗? –