复制一行同时保留不需要复制的行?

Duplicate a row whilst keeping rows that do not need duplicating?

我正在尝试复制数据集中的一行,同时保留不需要复制的行。

示例数据如下:

library(tidyverse)
df <- data.frame(id = c('2292','2293','2294'), var1 = c('a', 'b', 'c'),
                   freq = c(1, NA, NA))

之前:

    id var1 freq
1 2292    a    1
2 2293    b    0
3 2294    c    0    

之后:

      id var1 freq
1   2292    a    1
2 2292.1    a    1
3   2293    b    0
4   2294    c    0

我看过以下问题:

Repeat each row of data.frame the number of times specified in a column

但是当下面的例子:

df %>% uncount(freq, .remove = FALSE)

我得到:

    id var1 freq
1 2292    a    1

id 对 select 非常有帮助,然后复制 selected id,同时保留不需要复制的行,并且我想保留。

我也试过了:

df %>% map_df(., rep, .$freq)

这很接近:

df %>% 
    filter(row_number() %in% c(1)) %>% 
    rbind.fill(df) %>%
    arrange(id)

结果:

    id var1 freq
1 2292    a    1
2 2292    a    1
3 2293    b    0
4 2294    c    0

但理想情况下,我希望 select 行 id 而不是 row_number,然后更新 id 使其变为 2992.1。我可以在之后删除 freq 列。我正在使用 tidyverse.

为什么不先过滤掉这些然后再加入。建议的方法

#store id to duplicate in a vector

ids_v <- c(2292)

#Now filter out these and join

df %>% filter(id %in% ids_v) %>%
  mutate(id = paste0(id, '.1')) %>%
  rbind(df) %>% arrange(id)

      id var1 freq
1   2292    a    1
2 2292.1    a    1
3   2293    b   NA
4   2294    c   NA

我希望这能达到目的