【问题标题】:Duplicate a row whilst keeping rows that do not need duplicating?在保留不需要复制的行的同时复制一行?
【发布时间】:2021-03-08 07:23:14
【问题描述】:

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

这里是示例数据:

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 选择然后复制选定的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

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

【问题讨论】:

    标签: r duplicates tidyverse expand rbind


    【解决方案1】:

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

    #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
    

    我希望这能达到目的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-20
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 2017-08-06
      • 2021-04-28
      • 1970-01-01
      相关资源
      最近更新 更多