我有一个数据帧
> df<-data.frame(index=c(1,2,3,4,5,6),value=c(2,3,5,8,11,12))
> df
index value
1 1 2
2 2 3
3 3 5
4 4 8
5 5 11
6 6 12
我想创建一个新列,该列等于列 index 索引的列 value 的三个相邻值的总和,即
> df_res
index value res
1 1 2 NA
2 2 3 10
3 3 5 16
4 4 8 24
5 5 11 31
6 6 12 NA
第二行 res 是(2,3,5),第三和(3,5,8)等的总和( res <的第一行和最后一行/ em>无所谓,我暂时把它设为NA)
我怎样才能在R中完成它?
答案 0 :(得分:1)
如果您使用data.table
:
library(data.table)
setDT(df)
df[,res:=value+shift(value,1)+shift(value,1,type="lead")]
答案 1 :(得分:1)
您可以使用dplyr
和roll_sum
来执行:
df %>%
mutate(v2 = roll_sum(value, 3,fill = NA))
给出:
index value v2
1 1 2 NA
2 2 3 10
3 3 5 16
4 4 8 24
5 5 11 31
6 6 12 NA
答案 2 :(得分:0)
function removeProduct(product) {
clearInterval(undoTimeoutId);
cartList.find('.deleted').remove();
var topPosition = product.offset().top - cartBody.children('ul').offset().top,
productQuantity = Number(product.find('.quantity').find('input').val()),
productTotPrice = Number(product.find('.price').text().replace('€', ''));
}
答案 3 :(得分:0)
使用头部和尾部:
df$res <- df$value + c(tail(df$value, -1), NA) + c(NA, head(df$value, -1))
df
# index value res
# 1 1 2 NA
# 2 2 3 10
# 3 3 5 16
# 4 4 8 24
# 5 5 11 31
# 6 6 12 NA
或者使用zoo:
df$res <- zoo::rollsum(df$value, 3, na.pad = TRUE)