从R中的上一行获取值
假设我有一个df as从R中的上一行获取值,r,R,假设我有一个df as ID <- c("A1","A1","A1", "A2","A2","A3", "A3", "A3") b <- c(1,2 , 3, 1, 2, 1, 2, 3) c <- c (100, 200, 300 ,400, 500 ,600 ,700, 800 ) df1 <- data.frame(ID,b,c) 我想将ID中的c值移动到新列的下一行 所以结果应该是这样的 a b c new 1 A1 1 100 NA
ID <- c("A1","A1","A1", "A2","A2","A3", "A3", "A3")
b <- c(1,2 , 3, 1, 2, 1, 2, 3)
c <- c (100, 200, 300 ,400, 500 ,600 ,700, 800 )
df1 <- data.frame(ID,b,c)
我想将ID中的c值移动到新列的下一行
所以结果应该是这样的
a b c new
1 A1 1 100 NA
2 A1 2 200 100
3 A1 3 300 200
4 A2 1 400 NA
5 A2 2 500 400
6 A3 1 600 NA
7 A3 2 700 600
8 A3 3 800 700
我们可以使用
tidyverse
library(tidyverse)
df1 %>%
group_by(ID) %>%
mutate(new = lag(c))
# ID b c new
# <fctr> <dbl> <dbl> <dbl>
#1 A1 1 100 NA
#2 A1 2 200 100
#3 A1 3 300 200
#4 A2 1 400 NA
#5 A2 2 500 400
#6 A3 1 600 NA
#7 A3 2 700 600
#8 A3 3 800 700
库(tidyverse)
df1%>%
分组依据(ID)%>%
突变(新=滞后(c))
#ID b c新
#
#1 A1 1100 NA
#2 A1 2 200 100
#3 A1 3 300 200
#4 A2 1400 NA
#5 A2 2500 400
#6 A3 1600 NA
#7 A3 2 700 600
#8 A3 380700
基本上,这只是dplyr
而已,不是吗?@ztl是的,但tidyverse包含更多的软件包,因此,如果需要,我们可以使用其他功能OK。这让我不太容易理解,我想知道我使用的函数的确切来源,但好吧。。。(顺便说一句,我一直认为R代码应该包括包源代码,如dplyr::mutate
等,这是Python中的一个惯例,但这是另一个故事…)不,我不会解释的。也许是因为这个问题已经以重复的形式结束了——事实上,在不先检查是否是重复的情况下快速回答问题确实可以作为否决票的理由,因为这会“污染”所以,但否决票不是我的。。。
library(tidyverse)
df1 %>%
group_by(ID) %>%
mutate(new = lag(c))
# ID b c new
# <fctr> <dbl> <dbl> <dbl>
#1 A1 1 100 NA
#2 A1 2 200 100
#3 A1 3 300 200
#4 A2 1 400 NA
#5 A2 2 500 400
#6 A3 1 600 NA
#7 A3 2 700 600
#8 A3 3 800 700