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,它只允许对特定列执行此操作。