首页 > 解决方案 > 如何使用 mutate 和 ifelse 处理 NA 的存在?

问题描述

所以我有一个这样的数据框:

A_count | B_count
0       | 0
312     | NA
2       | 23
0       | 2
NA      | NA
13      | 0

我想创建第三列来检查这些列中的至少一个是否具有不是 0 或 NA 的值。所以我尝试了:

df<-df %>%
  mutate(new_column= ifelse(A_count>0 | B_count > 0, "yes","no"))

因此,如果其中任何一个大于 0,则新列应为“是”,所有其他情况应为“否”(即零和 NA)。但我得到的结果并不完全是这样,因为我在新列中得到了 NA,而我没有得到任何“否”。我猜是 NA 搞砸了,但我不确定。提前感谢您的任何回答

标签: r

解决方案


您可以使用rowSumswhich 将允许为许多列编写此内容,而无需单独指定它们:

df$col <- ifelse(rowSums(df > 0, na.rm  =TRUE) > 0, 'Yes', 'No')
#Without ifelse
#df$col <- c('No', 'Yes')[(rowSums(df > 0, na.rm  =TRUE) > 0) + 1]
df
#  A_count B_count col
#1       0       0  No
#2     312      NA Yes
#3       2      23 Yes
#4       0       2 Yes
#5      NA      NA  No
#6      13       0 Yes

要对选定的列执行此操作,我们可以对它们进行子集化:

cols <- c('A_count', 'B_count')
df$col <- ifelse(rowSums(df[cols] > 0, na.rm  =TRUE) > 0, 'Yes', 'No')

我们可以更改colscols <- grep('_count', names(df), value = TRUE)选择其中包含的所有列'_count'


推荐阅读