我有下面的数据框,它有一个列,我想创建第二列,在每一行中将放置第一列的下一行的值,在最后一行中放置第一行的值第一列。每次的行数可能不同。所以
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]
}
答案 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
shift
在 data.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 日创建