如何为数据框中每个组id的所有列(GROUPING变量除外)添加额外的行?

生效日期:

> library(tidyverse)
> df <- tibble(id = c("A", "B", "C"), day = c(3, 1, 2), station = c(10, 9, 2))
> df
# A tibble: 3 × 3
  id      day station
  <chr> <dbl>   <dbl>
1 A         3      10
2 B         1       9
3 C         2       2

预期输出:

# A tibble: 6 × 3
# Groups:   id [3]
  id      day station
  <chr> <dbl>   <dbl>
1 A         2       9
2 A         3      10
3 B         0       8
4 B         1       9
5 C         1       1
6 C         2       2

我可以通过以下方式兑换day美元:

> df %>% group_by(id) %>% complete(day = (day - 1):day)
# A tibble: 6 × 3
# Groups:   id [3]
  id      day station
  <chr> <dbl>   <dbl>
1 A         2      NA
2 A         3      10
3 B         0      NA
4 B         1       9
5 C         1      NA
6 C         2       2

但我不能适当地使用mutate来为station做这件事,因为我不知道complete内部的how to refer to each column:

try 失败:

> df %>% 
+ group_by(id) %>% 
+ mutate(across(c("day", "station"), complete((.x - 1):.x)))

推荐答案

这适用于您所需的输出:

df %>% bind_rows(df %>% mutate(across(c('day', 'station'), ~.x - 1 ))) %>% arrange(id)

# A tibble: 6 × 3
# id      day station
# <chr> <dbl>   <dbl>
# 1 A         3      10
# 2 A         2       9
# 3 B         1       9
# 4 B         0       8
# 5 C         2       2
# 6 C         1       1

解释:

在这里,我附加了相同的数据帧,但列发生了变化,因此:

df %>% mutate(across(c('day', 'station'), ~.x - 1 ))

是:

# A tibble: 3 × 3
  id      day station
  <chr> <dbl>   <dbl>
1 A         2       9
2 B         0       8
3 C         1       1

然后,对于bind_rows,我将这些行附加到原始数据帧中,这将带来:

# A tibble: 6 × 3
  id      day station
  <chr> <dbl>   <dbl>
1 A         3      10
2 B         1       9
3 C         2       2
4 A         2       9
5 B         0       8
6 C         1       1

最后,我只需按id进行排序,这样行看起来就像您的示例

R相关问答推荐

逐行替代引用前一行的for循环

如何创建具有总计列和ggplot 2所有条线的百分比标签的堆叠条形图?

如何根据包含相同值的某些列获取总额

如何删除多个.CSV文件的行

次级y轴R gggplot2

如何在R中添加截止点到ROC曲线图?

为什么横向页面会导致officeverse中的页码/节头/页脚出现问题?

如何在emmeans中计算连续变量的对比度

bslib::card_header中的shine::downloadButton,图标而不是文本

在R中为马赛克图中的每个字段着色

提取具有连续零值的行,如果它们前面有R中的有效值

为什么当用osmdata映射R时会得到相邻状态?

将小数分隔符放在R中的前两位数字之后

R中的哈密顿滤波

比较理论阿尔法和经验阿尔法

在保留列表元素属性的同时替换列表元素

R -在先前group_by级别汇总时获取最大大小子组的计数

自定义gggraph,使geom_abline图层仅在沿x轴的特定范围内显示

在散点图中使用geom_point放置线图例

如何筛选截止年份之前最后一个测量年度的所有观测值以及截止年份之后所有年份的所有观测值