【问题标题】:What's wrong with my R syntax using ifelse()?使用 ifelse() 的 R 语法有什么问题?
【发布时间】:2021-01-09 18:16:37
【问题描述】:

我试图在合并两个日期框架后创建一列,指示 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() 但它告诉我条件必须是逻辑向量而不是数据框。

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

【问题讨论】:

  • 你的意思是!is.na而不是is.na
  • @akrun,我想要丢失的情况。

标签: r if-statement


【解决方案1】:

没有样本数据集就很难提供帮助。您应该添加一个完整的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 2016-04-11
    • 2014-07-10
    • 2015-11-30
    • 2017-12-12
    相关资源
    最近更新 更多