在R中滞后的单列中移动值
我有以下建议:在R中滞后的单列中移动值,r,dataframe,shift,R,Dataframe,Shift,我有以下建议: example=data.frame(Code=c(A1,A1,A1,A2,A2,A2,A2,A3,A3,A3,A3,A3), Week=c(1,2,3,1,2,3,4,1,2,3,4,5), Price=c(10,10,8,4,4,6,6,15,20,20,20,20)) DF看起来像这样: Code Week Price 1 A1 1 10 2 A1 2 10 3 A1
example=data.frame(Code=c(A1,A1,A1,A2,A2,A2,A2,A3,A3,A3,A3,A3), Week=c(1,2,3,1,2,3,4,1,2,3,4,5), Price=c(10,10,8,4,4,6,6,15,20,20,20,20))
DF看起来像这样:
Code Week Price
1 A1 1 10
2 A1 2 10
3 A1 3 8
4 A2 1 4
5 A2 2 4
6 A2 3 6
7 A2 4 6
8 A3 1 15
9 A3 2 20
10 A3 3 20
11 A3 4 20
12 A3 5 20
Code Week Price
1 A1 1 8
2 A1 2 NA
3 A1 3 NA
4 A2 1 6
5 A2 2 6
6 A2 3 NA
7 A2 4 NA
8 A3 1 20
9 A3 2 20
10 A3 3 20
11 A3 4 NA
12 A3 5 NA
我想将价格值向上移动两行,而不更改DF的其余部分,但价格不能移动到其他代码,类似于以下内容:
Code Week Price
1 A1 1 10
2 A1 2 10
3 A1 3 8
4 A2 1 4
5 A2 2 4
6 A2 3 6
7 A2 4 6
8 A3 1 15
9 A3 2 20
10 A3 3 20
11 A3 4 20
12 A3 5 20
Code Week Price
1 A1 1 8
2 A1 2 NA
3 A1 3 NA
4 A2 1 6
5 A2 2 6
6 A2 3 NA
7 A2 4 NA
8 A3 1 20
9 A3 2 20
10 A3 3 20
11 A3 4 NA
12 A3 5 NA
我已经看到了将列值向上移动的方法,但我真的不想将价格移动到另一个代码中
求你了,我想得到一些帮助。谢谢。我们可以在
dplyr
library(dplyr)
df %>% group_by(Code) %>% mutate(Price = lead(Price, 2))
# Code Week Price
# <fct> <int> <int>
# 1 A1 1 8
# 2 A1 2 NA
# 3 A1 3 NA
# 4 A2 1 6
# 5 A2 2 6
# 6 A2 3 NA
# 7 A2 4 NA
# 8 A3 1 20
# 9 A3 2 20
#10 A3 3 20
#11 A3 4 NA
#12 A3 5 NA
在base中没有现成的函数可以执行此操作,但我们可以使用tail
和appendNA
值
df$Price <- with(df,ave(Price, Code, FUN = function(x) c(tail(x, -2), rep(NA, 2))))
df$价格