r - 如何使用 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 搞砸了,但我不确定。提前感谢您的任何回答
解决方案
您可以使用rowSums
which 将允许为许多列编写此内容,而无需单独指定它们:
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')
我们可以更改cols
为cols <- grep('_count', names(df), value = TRUE)
选择其中包含的所有列'_count'
。
推荐阅读
- c# - 有没有办法将 Windows 控制台应用程序转换为库,然后从 ac# Web 应用程序 html 链接调用其中一种方法?
- azure - 无法使用 Azure 数据工厂从 Azure 德国存储帐户复制数据
- typescript - 如何使用 TypeScript 访问嵌套的 JSON 属性?
- vba - Do While 循环在 VBA 中不能正确递增
- python - 幼苗的训练实例分割。不同背景下效果更好?
- angular - NativeScript - 跨多个设备的布局和格式化策略
- javascript - 如何按值查找单选按钮以使用另一个元素检查它 - VueJS
- c# - Azure 服务总线消息在传递后可以存活多久?
- sql - Oracle PL SQL 中的 RO 帐户,仅在查询中更改某些单元格的值
- ios - 视图周围未对齐的边框