R Data.table:使用组移位数据的操作

R Data.table:使用组移位数据的操作,r,data.table,R,Data.table,考虑以下数据表: 这很难看,速度也很慢,因此我正在寻找一种更好、更快、基于数据表的解决方案。使用类型为'lead'的shift函数获取下一个值,求和并除以2: DT[, valueOut := (valueIn + shift(valueIn, type = 'lead'))/2, by = year] 你会得到: year level valueIn valueOut 1: 2011 137 13 12.0 2: 2012 137 30 27

考虑以下数据表:

这很难看,速度也很慢,因此我正在寻找一种更好、更快、基于数据表的解决方案。

使用类型为'lead'的shift函数获取下一个值,求和并除以2:

DT[, valueOut := (valueIn + shift(valueIn, type = 'lead'))/2, by = year]
你会得到:

   year level valueIn valueOut
1: 2011   137      13     12.0
2: 2012   137      30     27.5
3: 2013   137      56     58.0
4: 2011   136      11      9.5
5: 2012   136      25     26.0
6: 2013   136      60     55.5
7: 2011   135       8       NA
8: 2012   135      27       NA
9: 2013   135      51       NA
指定换档功能的所有参数后:

DT[, valueOut := (valueIn + shift(valueIn, n = 1L, fill = NA, type = 'lead'))/2, by = year]
使用类型为'lead'的shift函数获取下一个值,求和并除以2:

DT[, valueOut := (valueIn + shift(valueIn, type = 'lead'))/2, by = year]
你会得到:

   year level valueIn valueOut
1: 2011   137      13     12.0
2: 2012   137      30     27.5
3: 2013   137      56     58.0
4: 2011   136      11      9.5
5: 2012   136      25     26.0
6: 2013   136      60     55.5
7: 2011   135       8       NA
8: 2012   135      27       NA
9: 2013   135      51       NA
指定换档功能的所有参数后:

DT[, valueOut := (valueIn + shift(valueIn, n = 1L, fill = NA, type = 'lead'))/2, by = year]
如果你:

不介意使用dplyr 这一年与你的物品有关 所示结构代表了现实 那么这可能对你有用:

DT %>% group_by(year) %>% mutate(valueOut = (valueIn + lead(valueIn)) / 2)
如果你:

不介意使用dplyr 这一年与你的物品有关 所示结构代表了现实 那么这可能对你有用:

DT %>% group_by(year) %>% mutate(valueOut = (valueIn + lead(valueIn)) / 2)
我们也可以使用带有Reduce的shift

更容易概括,因为shift可以取n值的向量。

我们也可以将shift与Reduce一起使用


更容易概括,因为shift可以取一个“n”值的向量。

我认为滞后函数在这里是一个可能的解决方案。甚至可能是数据。table::shift我认为滞后函数在这里是一个可能的解决方案。甚至可能是数据。table::shiftPerfect。这正是我想要的解决方案。我尝试过使用shift,但没有成功,现在我知道它是如何工作的了。太好了。这正是我想要的解决方案。我尝试过使用shift,但没有成功,现在我知道它是如何工作的了。