繁体   English   中英

使用 ifelse() 的 R 语法有什么问题?

[英]What's wrong with my R syntax using ifelse()?

我试图在合并两个日期框架后创建一个列,指示 1 = 成功匹配,2 = 数据框 1 中不匹配的行,3 = 数据框 2 中不匹配的行。

在合并之前,我在每个数据框中创建了一个等于 1 的列,以便我可以分析合并。

合并后的数据框如下所示:

merge_s  merge_p
1        NA   
NA       1  
1        1

这是我的代码:

pretest_merged$merge_result <- ifelse(pretest_merged$merge_p == 1 & pretest_merged$merge_s==1,1,
                                      ifelse(pretest_merged$merge_p == 1 & is.na(merge_s),2,
                                             ifelse(pretest_merged$merge_s==1 & is.na(merge_p),3,"error")))

生成的数据框如下所示:

merge_s  merge_p  merge_result
1        NA       NA         
NA       1        NA      
1        1        1

当我希望它看起来像这样时:

merge_s  merge_p  merge_result 
1        NA       3     
NA       1        2            
1        1        1            

我试过摆脱 is.na() 但这不起作用。 我也尝试过使用 if_else() 但它告诉我条件必须是逻辑向量而不是数据框。

我究竟做错了什么? 对不起,如果这个问题是超级基本的,但我想不出还有什么可以尝试的。 谢谢。

没有样本数据集就很难提供帮助。 您应该添加一个完整的reprex

然而,也许这个块可以帮助:

library(tidyverse)

df1 <- data.frame(id1 = c(1,2,3), val1 = c('blue','red','green'))
df2 <- data.frame(id2 = c(2,4,7,3), val2 = c('red','pink','grey','green'))


df_output <- merge(df1, df2, by.x = "id1", by.y = "id2", all.x = TRUE, all.y = TRUE)

df_output %>% mutate (chkcol = 
                        
                        case_when(
                          is.na(val1) == FALSE & is.na(val2) == FALSE ~ 1,
                          is.na(val1) == TRUE & is.na(val2) == FALSE ~ 2,
                          is.na(val1) == FALSE & is.na(val2) == TRUE ~ 3
                        )
                        
                        )

df_output

  id1  val1  val2 chkcol
1   1  blue  <NA>      3
2   2   red   red      1
3   3 green green      1
4   4  <NA>  pink      2
5   7  <NA>  grey      2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM