有没有办法用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 groupdf%>%group_by(ID,ab)%%>%summary(want=list(if(all(is.NA(int)))1:3 else int))%%>%unest(c(want))
abgroup内的所有NA。有时我可以在一个ID中只有a和b(例如ID==2可能只有ab==a或ab==b),但原理是相同的(将a中的值扩展到b)。不,每个ID只填充一个组新示例的预期输出是什么当不同的int数不同时会出现故障,例如:df可能还有其他方法,只要所有int
值显示为allab
@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