根据另一列的下一行的值创建一个包含值的列

时间:2021-03-15 02:35:30

标签: r

我有下面的数据框,它有一个列,我想创建第二列,在每一行中将放置第一列的下一行的值,在最后一行中放置第一行的值第一列。每次的行数可能不同。所以

name
1     Alice
2       Bob
3     Cecil
4     David
5 Esmeralda

会给

name        to
1     Alice       Bob
2       Bob     Cecil
3     Cecil     David
4     David Esmeralda
5 Esmeralda     Alice

我的代码:

actors <- data.frame(name=c("Alice", "Bob", "Cecil", "David",
                            "Esmeralda"))



actors$to<-for(i in 1:nrow(actors)){
  actors[i+1,1]
}

2 个答案:

答案 0 :(得分:2)

lead 中使用 dplyr 获取下一个值:

library(dplyr)
actors %>% mutate(to = lead(name, default = first(name)))

#      name        to
#1     Alice       Bob
#2       Bob     Cecil
#3     Cecil     David
#4     David Esmeralda
#5 Esmeralda     Alice

shiftdata.table

library(data.table)
setDT(actors)[, to := shift(name, type = 'lead', fill = first(name))]

并在基础 R 中:

transform(actors, to = c(name[-1], name[1]))

答案 1 :(得分:1)

这行得通吗?

actors <- data.frame(name=c("Alice", "Bob", "Cecil", "David",
                            "Esmeralda"))

library(dplyr)


actors2 <- actors %>% 
  mutate(
    to = lead(name)
  )

curr.pos <- which(is.na(actors2$to))[[1]]
actors2$to[c(curr.pos)] <- actors2$name[1]


#>        name        to
#> 1     Alice       Bob
#> 2       Bob     Cecil
#> 3     Cecil     David
#> 4     David Esmeralda
#> 5 Esmeralda     Alice

reprex package (v0.3.0) 于 2021 年 3 月 14 日创建