复制一行同时保留不需要复制的行?
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
我希望这能达到目的
我正在尝试复制数据集中的一行,同时保留不需要复制的行。
示例数据如下:
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
我希望这能达到目的