3
我有一個數據框,其中包含一個字符變量,主要包括數值,偶爾有已知字符串以及一些NA
值。我想有條件地將數值重新格式化爲有一個小數位,但是隻保留字符和NA
值。dplyr條件變異本身
此代碼的工作的玩具數據幀併產生所期望的輸出:
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
語句中ifelse
條件爲false的情況。
我可以將整個東西包裝在suppressWarnings()
中,但有沒有其他方法可以在dplyr
框架內生成所需的輸出而不會出現警告?我敢肯定有一個data.table
方式做到這一點,但是這是不需要data.table
爲別的包的一部分,它似乎愚蠢,使之必要這樣一小片......