英文:
Using case_when for nested ifelse statements
问题
您尝试创建一个新的变量B,根据A1、A2和A3的值来填充,但在A1和A2都缺失的情况下,它返回了NA而不是A3。您可能错过了一个条件,您可以使用以下方式来修复它:
adf %>%
mutate(
B = case_when(
!is.na(A1) ~ A1,
is.na(A1) & !is.na(A2) ~ A2,
is.na(A1) & is.na(A2) & !is.na(A3) ~ A3,
TRUE ~ NA
)
)
这个修改会确保当A1和A2都缺失,但A3存在时,将值填充为A3。
英文:
I have data that looks like this sample:
A1<-seq(3,5); A2<-seq(1,5); A3<-seq(2,8)
length(A1)<-7; length(A2)<-7; length(A3)<-7
adf <-as.data.frame(cbind(A1,A2,A3))
A1 A2 A3
1 3 1 2
2 4 2 3
3 5 3 4
4 NA 4 5
5 NA 5 6
6 NA NA 7
7 NA NA 8
I would like to create a new variable that pulls from A1, unless it is a missing value, in which case it pulls from A2, unless there is also a missing value, in which case it pulls from A3. This is what I have tried:
adf %>%
mutate(
B = case_when(
!is.na(A1) ~ A1,
is.na(A1) ~ A2,
(is.na(A1) & is.na(A2) & !is.na(A3)) ~ A3
)
)
A1 A2 A3 B
1 3 1 2 3
2 4 2 3 4
3 5 3 4 5
4 NA 4 5 4
5 NA 5 6 5
6 NA NA 7 NA
7 NA NA 8 NA
This works for the most part but as you can see, in cases where both A1 and A2 are missing, but A3 is not, it return NAs instead of A3. What am I missing?
答案1
得分: 1
The coalesce
function handles just this use case. You can do:
adf %>% mutate(B=coalesce(A1, A2, A3))
giving:
A1 A2 A3 B
1 3 1 2 3
2 4 2 3 4
3 5 3 4 5
4 NA 4 5 4
5 NA 5 6 5
6 NA NA 7 7
7 NA NA 8 8
英文:
The coalesce
function handles just this use case. You can do:
adf %>% mutate(B=coalesce(A1, A2, A3))
giving:
A1 A2 A3 B
1 3 1 2 3
2 4 2 3 4
3 5 3 4 5
4 NA 4 5 4
5 NA 5 6 5
6 NA NA 7 7
7 NA NA 8 8
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论