我有一个数据框,其中的字符变量主要由数值组成,偶尔会有已知的字符串以及一些 NA
值 . 我想有条件地重新格式化数值以具有一个小数位,但保留字符和 NA
值 .
此代码适用于玩具数据框并生成所需的输出:
df <- data.frame(a = c("1", "2", "3", "none", NA),
stringsAsFactors = FALSE)
test <- df %>%
mutate(a = ifelse(is.na(a) | a == "none",
a,
format(round(as.numeric(a), 1), nsmall = 1)))
test
# a
# 1 1.0
# 2 2.0
# 3 3.0
# 4 none
# 5 <NA>
但是会发出警告信息
Warning message:
In format(round(as.numeric(c("1", "2", "3", "none", NA)), 1), nsmall = 1) :
NAs introduced by coercion
我相信是这样的情况b / c format(round(as.numeric(a), 1), nsmall = 1)))
仍然作用于整个向量,即使其中的值仅用于 mutate
条件为 mutate
的语句中 .
我可以将整个事情包装在 suppressWarnings()
中,但是还有其他方法可以在 dplyr
框架内生成所需的输出而不发出警告吗?我是'm sure there'这样做的方法,但这是一个包的一部分,不需要 data.table
用于其他任何东西,这对于这样一个小块来说它是必要的似乎很愚蠢......
1 回答
使用
replace
并且您只能转换a
列中的数字类型数据: