gpt4 book ai didi

r - 在 R(或 RStudio)中,我想将带单位的字段转换为数字,但收到错误警告

转载 作者:行者123 更新时间:2023-12-04 02:30:43 24 4
gpt4 key购买 nike

使用 R,我的数据如下所示:

A,   B
= =====
x," 120"
y," 2300"
z,"1.2 M"
x," 4500"
x," 42 M"

这是使用以下方法构建的:

A <- c("x","y","z","x","x")
B <- c(" 120", " 2300", "1.2 M", " 4500", " 42 M")
data <- data.frame(A, B)

我想将第二列转换为有效数字(“M”表示百万)。我拥有的是:

df <- data %>%
mutate( B = ifelse( grepl("^ *[0-9]+$", .$B),
as.numeric(.$B),
1000000 * as.numeric(sub(" *([0-9]+) M", "\\1", .$B))))

即。它查找带有“M”的字段,如果找到,则在 sustricg 上执行 as.numeric 并乘以 1000000。

这工作正常,除了我收到警告:

Warning messages:
1: Problem with `mutate()` input `B`.
i NAs introduced by coercion
i Input `B` is `ifelse(...)`.
2: In ifelse(grepl("^ *[0-9]+$", .$B), as.numeric(.$B), 1e+06 * :
NAs introduced by coercion

但是当我使用 df %>% filter(is.na(B)) 检查数据时,没有 NA

我不想完全禁用警告,但我确实想在它“无效”时避免它。

有什么建议吗?阿米,我错过了什么?

最佳答案

您收到警告的原因是因为ifelse/if_else/case_when将整个向量传入yesno 部分。稍后根据条件决定要返回的输出。

所以我们认为我们只将 as.numeric(B) 应用于满足条件的数字,但实际上它与应用 as.numeric(data$B) 相同 给出了相同的警告,即 B 中的少数值无法转换为数字。因此,您需要以一种完全不会为任何值生成警告的方式使用 ifelse(@r2evans 已经显示)或在没有 ifelse 的情况下单独应用操作>.

data$C <- NA_real_
inds <- grepl("^ *[0-9]+$", data$B)
data$C[inds] <- as.numeric(B[inds])
data$C[!inds] <- 1000000 * as.numeric(sub(" *([0-9]+) M", "\\1", data$B[!inds]))

关于r - 在 R(或 RStudio)中,我想将带单位的字段转换为数字,但收到错误警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64383098/

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