簡體   English   中英

R中有沒有辦法用dplyr組用所有可能的值填充NA?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM