r - 如果特征存在则变异,否则 NA_real_
问题描述
数据框:
exdf <- data.frame(
a = 1:3,
b = c(2,2,2)
)
有时 b 存在,在这种情况下可以这样做:
exdf %>% mutate(c = a / b)
但是,有时特征 b 不会出现,在这种情况下:
exdf %>% select(-b) %>% mutate(c = a / b)
Error: Problem with `mutate()` input `c`.
x object 'b' not found
ℹ Input `c` is `a/b`.
我想告诉dplyr
尝试突变,否则如果出现问题,只需将新功能 c 全部NA_real_
改为a / b
.
这可以做到吗?
解决方案
设置一个简单的 if else 语句,在mutate
该语句中检查列名是否在 data.frame 中。
> exdf %>%
... dplyr::rowwise() %>%
... dplyr::mutate(q = ifelse("b" %in% colnames(.), a/b, NA_real_))
# A tibble: 3 x 3
# Rowwise:
a b q
<int> <dbl> <dbl>
1 1 2 0.5
2 2 2 1
3 3 2 1.5
> exdf %>%
... dplyr::select(-b) %>%
... dplyr::rowwise() %>%
... dplyr::mutate(q = ifelse("b" %in% colnames(.), a/b, NA_real_))
# A tibble: 3 x 2
# Rowwise:
a q
<int> <dbl>
1 1 NA
2 2 NA
3 3 NA
推荐阅读
- java - 如何在 Play Framework 中创建 cron 作业
- sql - SQL Server - 将字符串组合为整数,其中整数可以有可变数量的前导零
- c# - SharePoint item.File - ServerObjectNullReferenceException
- python-3.x - 我如何从这个网站上刮取 OHLC 值
- java - 带有元组的 Hashmap 用于键和映射值
- ruby-on-rails - NameError:未初始化的常量 AppName::Loader::ModelImport::MyModel
- java - 在 Netbeans 之外为反射库加载类
- python - 如何在 Python 中加入 2 个 DataFrame 并在结果中保留 NAN?
- node.js - 使用 npm 和 CakePHP 3 - 文件位置
- if-statement - 获取行位置参考并填写 X 次,直到遇到新值