我有一个data.frame,看起来是这样的:
df <- data.frame(id=c("001","002","003","004"),year=c(2015,2015,2015,2015),
x1=c(15,20,25,30),x2=c(1,2,3,4))
id year x1 x2
001 2015 15 1
002 2015 20 2
003 2015 25 3
004 2015 30 4我希望复制id、x1和x2,但将year更改为以类似于以下内容的data.frame结束:
id year x1 x2
001 2015 15 1
002 2015 20 2
003 2015 25 3
004 2015 30 4
001 2016 15 1
002 2016 20 2
003 2016 25 3
004 2016 30 4我能做到这一点
df2 <- df %>%
mutate(year = 2016)
df3 <- rbind(df, df2)但是我想知道是否有一种更直观的方法,这样我就可以为20+年创建副本,而不需要多个新的data.frames。
发布于 2021-06-16 12:09:53
df <- data.frame(id=c("001","002","003","004"),year=c(2015,2015,2015,2015),
x1=c(15,20,25,30),x2=c(1,2,3,4))
library(tidyr)
df %>% complete(nesting(id, x1, x2), year = 2015:2016)
#> # A tibble: 8 x 4
#> id x1 x2 year
#> <chr> <dbl> <dbl> <dbl>
#> 1 001 15 1 2015
#> 2 001 15 1 2016
#> 3 002 20 2 2015
#> 4 002 20 2 2016
#> 5 003 25 3 2015
#> 6 003 25 3 2016
#> 7 004 30 4 2015
#> 8 004 30 4 2016在额外的几年里,你只需要根据你的需要改变2015:2016。您还可以使用seq在这里使用动态引用。
https://stackoverflow.com/questions/68002356
复制相似问题