gpt4 book ai didi

r - dplyr 自身有条件变异

转载 作者:行者123 更新时间:2023-12-02 04:55:18 25 4
gpt4 key购买 nike

我有一个数据框,其中的字符变量主要由数值组成,偶尔包含已知字符串以及一些 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))) 仍然作用于整个向量,即使其中的值仅在 ifelse 条件为 false 的 mutate 语句中使用。

我可以将整个内容包装在 suppressWarnings() 中,但是是否有其他方法可以在 dplyr 框架内生成所需的输出而不发出警告?我确信有一种 data.table 方法可以做到这一点,但这是一个不需要 data.table 来执行其他任何操作的包的一部分,而且似乎很愚蠢对于这么小的一 block 来说是必要的......

最佳答案

使用replace可以只转换a列中的数值类型数据:

test <- df %>%
mutate(a = replace(a, !is.na(a) & a != "none",
format(round(as.numeric(a[!is.na(a) & a != "none"]), 1), nsmall = 1)))

test
# a
#1 1.0
#2 2.0
#3 3.0
#4 none
#5 <NA>

关于r - dplyr 自身有条件变异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40493735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com