R 如何使用mutate和ifelse处理NAs的存在?

R 如何使用mutate和ifelse处理NAs的存在?,r,R,因此,我有一个数据帧,如下所示: 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&

因此,我有一个数据帧,如下所示:

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"))
df%
变异(新列=ifelse(A_计数>0 | B_计数>0,“是”、“否”))
因此,如果其中任何一个大于0,则新列应为“是”,所有其他情况应为“否”(即零和NAs)。但我得到的结果并不完全是这样,因为我在新专栏中得到了NAs,而我没有得到任何“否”。我猜是NAs把事情搞砸了,但我不确定。
提前感谢您提供的任何答案

您可以使用
行和
,这将允许在不单独指定的情况下为多个列编写此选项:

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
df$col 0,na.rm=TRUE)>0,‘是’、‘否’)
#没有别的
#df$col 0,na.rm=TRUE)>0)+1]
df
#A_count B_count col
#100不
#2是的
#3 2 23是的
#402是的
#5不,不
#6130是的
要对选定列执行此操作,我们可以将它们子集:

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

我们可以使用
dplyr
cols
更改为
cols,您可以使用
c_overs()
定义变量范围,然后评估条件。代码如下:

library(dplyr)
#Code
newdf <-df %>% rowwise() %>% 
  mutate(Var=any(c_across(A_count:B_count)>0 & !is.na(c_across(A_count:B_count)))) %>%
  mutate(Var=ifelse(Var,'Yes','No'))
库(dplyr)
#代码
newdf%rowwise()%%>%
变异(Var=any(c_交叉(A_计数:B_计数)>0&!is.na(c_交叉(A_计数:B_计数)))%>%
变异(Var=ifelse(Var,'Yes','No'))
输出:

# A tibble: 6 x 3
# Rowwise: 
  A_count B_count Var  
  <chr>   <chr>   <chr>
1 0       0       No   
2 312     NA      Yes  
3 2       23      Yes  
4 0       2       Yes  
5 NA      NA      No   
6 13      0       Yes 
#一个tible:6 x 3
#顺时针:
A_计数B_计数变量
100不
2是的
3 2 23是的
402是的
5不,不
6130是的

尝试此更改
ifelse(A|count>0 | is.na(A|count)| B|count>0 | is.na(B|count),“是”、“否”)
非常感谢,似乎效果不错。但假设我的df比我展示的列多得多,我如何具体选择“A_计数”和“B_计数”?我以前问过这个问题,实际上我还有其他带字符串的列,例如Check updated Response,它只允许对特定列执行此操作。