【发布时间】:2022-01-13 05:44:54
【问题描述】:
在 dplyr 中是否有一种直接的方法可以通过基于特定向量复制一行来扩展数据帧?
例如,我有以下数据框:
df <- tibble(Year=c(2019),
cat1=c("A","B"),
cat2=c("X","Y"),
value1=c(1,2),
value2=c(10,20))
selected_years <- c(2019:2021)
我想在 2019-2021 年复制 cat1=="A" 所在的行。一些列(value1,cat)的值应该取自原始年份 2019,其他一些列(value2)用 NA 填充。
最终输出应如下所示:
Year cat value1 value2
2019 A 1 10
2020 A 1 NA
2021 A 1 NA
2019 B 2 20
我尝试使用bind_rows()...但是,结果并不完全是我想要的(我只得到“A”部分而不是“B”部分),我不确定这是否真的最直观/dplyr 的方法,或者如果另一种方法(甚至特定功能)更合理:
df%>%
filter(cat1=="A",Year==2019)%>%
bind_rows(
data.frame(
Year=setdiff(selected_years,.$Year),
cat1=.$cat1,
value1=.$value1
)
)
)
编辑:
我也尝试过使用expand 和right_join,但是我想要的列值不会重复:
df %>%
dplyr::right_join(df %>%
filter(cat1=="A",Year==2019)%>%
expand(Year=c(2019:2021)))
可能涉及case_when的方法?
【问题讨论】: