[英]is there a way in R to fill NA's with all possible values by a dplyr group?
說我有:
df<-data.frame(ID=c('1', '1', '1', '1', '1', '1', '1'),
int=c(NA,NA,1,2,3,2, NA),
ab=c('a', 'a', 'b', 'b', 'b', 'b', 'c'))
df
ID int ab
1 1 NA a
2 1 NA a
3 1 1 b
4 1 2 b
5 1 3 b
6 1 2 b
7 1 NA c
對於非 NA 組ab
所有int
值,我想將這些值擴展到另一個需要插入額外行的ab
。 所以我希望 ab==a 和 ab==c 顯示值 1、2 和 3。 就像是:
dfwant<-data.frame(ID=c('1','1', '1', '1', '1', '1', '1', '1', '1', '1'),
int=c(NA, NA,NA,1,2,3,2, NA, NA, NA),
ab=c('a','a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c'),
want=c(1,2,3,1,2,3,2, 1,2,3))
ID int ab want
1 1 NA a 1
2 1 NA a 2
3 1 NA a 3
4 1 1 b 1
5 1 2 b 2
6 1 3 b 3
7 1 2 b 2
8 1 NA c 1
9 1 NA c 2
10 1 NA c 3
也許還有另一種方式,但我希望將int
1, 2, 3 值與ID
所有ab
值關聯。 也許我需要更多的專欄,請幫忙
編輯:還希望它適用於具有不同數量的唯一int
不同組:
df<-data.frame(ID=c('1', '1', '1', '1', '1', '1', '1', '2', '2', '2', '2', '2', '2', '2'),
int=c(NA,NA,1,2,3,2, NA, NA,NA,5,6,7,8, NA),
ab=c('a', 'a', 'b', 'b', 'b', 'b', 'c', 'd', 'd', 'e', 'e', 'e', 'e', 'f'))
ID int ab
1 1 NA a
2 1 NA a
3 1 1 b
4 1 2 b
5 1 3 b
6 1 2 b
7 1 NA c
8 2 NA d
9 2 NA d
10 2 5 e
11 2 6 e
12 2 7 e
13 2 8 e
14 2 NA f
ID want ab
1 1 1 a
2 1 2 a
3 1 3 a
4 1 1 b
5 1 2 b
6 1 3 b
7 1 2 b
8 1 1 c
9 1 2 c
10 1 3 c
11 2 5 d
12 2 6 d
13 2 7 d
14 2 8 d
15 2 5 e
16 2 6 e
17 2 7 e
18 2 8 e
19 2 5 f
20 2 6 f
21 2 7 f
22 2 8 f
一種選擇就complete
library(dplyr)
library(tidyr)
df %>%
mutate(want = int) %>%
group_by(ID, ab) %>%
complete(want = unique(na.omit(.$want))) %>%
filter(!is.na(want))
# A tibble: 10 x 4
# Groups: ID, ab [3]
# ID ab want int
# <fct> <fct> <dbl> <dbl>
# 1 1 a 1 NA
# 2 1 a 2 NA
# 3 1 a 3 NA
# 4 1 b 1 1
# 5 1 b 2 2
# 6 1 b 2 2
# 7 1 b 3 3
# 8 1 c 1 NA
# 9 1 c 2 NA
#10 1 c 3 NA
對於更新的數據
library(purrr)
df %>%
mutate(want = int) %>%
group_split(ID = as.character(ID)) %>%
map_dfr(~ .x %>%
group_by(ab) %>%
complete(want = unique(na.omit(.$want))) %>%
filter(!is.na(want))) %>%
ungroup %>%
fill(ID, .direction = 'downup')
# A tibble: 22 x 4
# ab want ID int
# <fct> <dbl> <chr> <dbl>
# 1 a 1 1 NA
# 2 a 2 1 NA
# 3 a 3 1 NA
# 4 b 1 1 1
# 5 b 2 1 2
# 6 b 2 1 2
# 7 b 3 1 3
# 8 c 1 1 NA
# 9 c 2 1 NA
#10 c 3 1 NA
# … with 12 more rows
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.