我想按小组对data.table
行进行操作。
在下面的示例中,我希望在2017年获得每个values
的{{1}},并从2014年的值中减去。解决方案不应涉及重塑数据。它必须创建一个新列,显示每个id的值在两年之间如何变化。
id
预期产出:
library(data.table)
dt <- data.table( id=rep(letters[1:4],2),
values=c(11,22,33,44, 1,2,3,4),
year=c(rep(2014,4), rep(2017,4)))
#> dt
#> id values year
#> 1: a 11 2014
#> 2: b 22 2014
#> 3: c 33 2014
#> 4: d 44 2014
#> 5: a 1 2017
#> 6: b 2 2017
#> 7: c 3 2017
#> 8: d 4 2017
答案 0 :(得分:4)
使用
这非常简单dt[, result := values[year == 2014] - values[year == 2017], by = id]
# id values year result
#1: a 11 2014 10
#2: b 22 2014 20
#3: c 33 2014 30
#4: d 44 2014 40
#5: a 1 2017 10
#6: b 2 2017 20
#7: c 3 2017 30
#8: d 4 2017 40
另一个选项(不太明确)是diff
:
dt[order(-year), result := diff(values), by = id]
答案 1 :(得分:2)
另一个选项是dplyr
library(dplyr)
dt %>%
group_by(id) %>%
mutate(result = values[year == 2014] - values[year == 2017])