是否可以将包含数字和字符的列转换为 R 箭头中的数字?

Is it possible to convert a column contain numeric and character into numeric in R arrow?

提问人:doraemon 提问时间:9/19/2023 最后编辑:doraemon 更新时间:9/19/2023 访问量:67

问:

例如 如果我运行以下代码:

library(arrow)
library(tidyverse)

mtcars$cyl[2:5] = 'a'

mtcars %>%
  arrow_table() %>%
  mutate(cyl = cast(cyl, numeric())) %>% 
  collect()

弹出一条错误消息:

Error in `compute.arrow_dplyr_query()`:
! Invalid: Failed to parse string: 'a' as a scalar of type double
Run `rlang::last_trace()` to see where the error occurred.

我希望结果是没有错误的,那些“a”将被转换为.但是,函数的性质似乎与 r 中的性质不同。NAcastas.numeric

r 字符 数字 Apache 箭头

评论

2赞 Heinz Siahaan 9/19/2023
强制转换函数在类型转换中更加严格,并期望可以直接转换为目标类型的值。您可以在此处查看文档:cran.r-project.org/web/packages/arrow/arrow.pdf。您可以添加 if else 以在转换为该特定数据类型之前检查数据是否为数字
0赞 doraemon 9/19/2023
感谢您的回复。我知道它比.所以我想知道是否会有类似于 的属性,它可以自动将非数字转换为。as.numericcastas.numericNA

答:

1赞 Nir Graham 9/19/2023 #1

似乎有效

library(arrow)
library(tidyverse)
library(stringr)

mtcars$cyl[2:5] = 'a'

mtcars %>%
  arrow_table() %>%
  mutate(
         cyl = cast(if_else(str_detect(cyl, "^[0-9]+$"),
                               cyl,NA_character_), numeric())) %>% 
  collect()