r - 将 NA 替换为“”,但仅限于字符列
问题描述
我有一个包含约 200 列各种类型的大型数据集。我需要用 替换NA
值""
,但只能在字符列中。
使用虚拟数据表
DT <- data.table(x = c(1, NA, 2),
y = c("a", "b", NA))
> DT
x y
1: 1 a
2: NA b
3: 2 <NA>
> str(DT)
Classes ‘data.table’ and 'data.frame': 3 obs. of 2 variables:
$ x: num 1 NA 2
$ y: chr "a" "b" NA
我已经尝试了以下带有条件的 for 循环,但它不起作用。
for (i in names(DT)) {
if (class(DT$i) == "character") {
DT[is.na(i), i := ""]
}
}
循环运行没有错误,但不会更改DT
.
我正在寻找的预期输出是这样的:
x y
1: 1 a
2: NA b
3: 2
解决方案不一定要涉及循环,但我想不出一个。
解决方案
如果您不介意使用dplyr ,一种选择:
na_to_space <- function(x) ifelse(is.na(x)," ",x)
> DT %>% mutate_if(.predicate = is.character,.funs = na_to_space)
x y
1 1 a
2 NA b
3 2
推荐阅读
- clickhouse - 分布式表删除分区
- logging - 如何在我的 Qt5 应用程序中禁用所有第三方库日志?
- autoconf - 从 C 或 Objective-C 源代码自动进行条件编译
- blogdown - blogdown 中的 Gitbook 风格词汇表
- angular - 在 Angular 应用程序中保护 google maps api 密钥
- shell - 将 shell 脚本从 ftp 更改为 sftp
- r - R函数返回无序向量中排序元素的顺序?
- laravel - Laravel 7资源模型绑定,编辑页面无信息
- node.js - 每个新项目都需要安装 mongoose、mocha、nodemon 等软件包吗?
- azure-cosmosdb - 联合步骤不适用于多个元素