有没有办法用R来填充NA';是否由dplyr组使用所有可能的值?

有没有办法用R来填充NA';是否由dplyr组使用所有可能的值?,r,R,假设我有: 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

假设我有:

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

也许还有另一种方法,但我想让
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

df一个选项是
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
库(dplyr)
图书馆(tidyr)
df%>%
变异(want=int)%>%
分组依据(ID,ab)%>%
完成(想要=唯一(不需要(.$want)))%>%
过滤器(!is.na(需要))
#一个tibble:10x4
#组:ID,ab[3]
#我想要整数
#      
#1 a 1 NA
#2 1 a 2 NA
#31A3NA
#41b11
#51B22
#61B22
#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
库(purrr)
df%>%
变异(want=int)%>%
组分割(ID=as.character(ID))%>%
map_dfr(~.x%>%
组别(ab)%>%
完成(想要=唯一(不需要(.$want)))%>%
过滤器(!is.na(want))%>%
解组%>%
填充(ID,.方向='downup')
#A tibble:22x4
#ab想要ID int
#      
#1 a 11 NA
#2 a 2 1 NA
#3 a 3 1 NA
#4b11
#5B212
#6B212
#7 b 3 1 3
#8C11NA
#9C21NA
#10C31NA
#…还有12行

像a或c这样的组是否可能有一些NA元素和一些其他非NA元素,或者是全部NA或al非NA元素?同样在这种情况下,b组是已填充的组,应作为源。是否可以填充多个组?当所有值都是NA by group
df%>%group_by(ID,ab)%%>%summary(want=list(if(all(is.NA(int)))1:3 else int))%%>%unest(c(want))
ab
group内的所有NA。有时我可以在一个ID中只有a和b(例如ID==2可能只有ab==a或ab==b),但原理是相同的(将a中的值扩展到b)。不,每个ID只填充一个组新示例的预期输出是什么当不同的int数不同时会出现故障,例如:
df可能还有其他方法,只要所有
int
值显示为all
ab
@biostatguy12,代码仍在运行,没有任何错误,我就可以创建更多的列。我很好奇您在这种情况下的预期输出,因为您的问题是
R是否用dplyr组的所有可能值填充NA?
是的,例如在我在评论中所做的df中,我希望
希望
对于a和c只有1、2、3,而不是对于d和f。同样,我不希望5,6,7,8出现在ID中==1@biostatguy12刚刚看到你更新的帖子。你能检查一下我更新的解决方案吗
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