为什么 parse_number 函数说我的字符向量不是字符?

Why is the parse_number function saying my character vector is not a character?

我正在使用 R 从 ID 字符串中提取数字。过去,我使用过 readr 的 parse_number() 函数,但最近,我遇到了一个奇怪的错误,它说我的字符列不是字符:

library(dplyr)
library(readr)

test <- tibble(id_numbers = c("ICKLSD5", "DFTEM4", "DPDFE45"))

test %>%
  parse_number(id_numbers)


Error in parse_vector(x, col_number(), na = na, locale = locale, trim_ws = trim_ws) : 
  is.character(x) is not TRUE

但是,该列显然是一个字符向量:


#Yields true
is.character(test$id_numbers)

而且,即使在 as.character 中换行仍然会出现相同的错误:

test %>%
  parse_number(as.character(id_numbers))

我知道其他函数还有其他解决方法,但我真的想使用 parse_number()。谁能解释为什么我会收到此错误以及如何修复它?

您不能将数据框直接传送到 parse_number。您需要通过管道传输到一个 mutate:

test %>% mutate(id_numbers=parse_number(id_numbers))

假设您要更改 data.frame 本身。因为

test %>% parse_number(id_numbers)

相同
parse_number(test, id_numbers)

test 不是字符向量,它是 data.frame,因此会出现错误。