我正在使用 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
Run Code Online (Sandbox Code Playgroud)
但是,该列显然是一个字符向量:
#Yields true
is.character(test$id_numbers)
Run Code Online (Sandbox Code Playgroud)
而且,即使将列包装在 as.character 中仍然会出现相同的错误:
test %>%
parse_number(as.character(id_numbers))
Run Code Online (Sandbox Code Playgroud)
我知道还有其他函数的其他解决方法,但我真的想使用 parse_number()。谁能解释一下为什么我会收到此错误以及如何修复它?
您无法将数据帧直接通过管道传输到parse_number. 您需要通过管道输入 mutate:
test %>% mutate(id_numbers=parse_number(id_numbers))
Run Code Online (Sandbox Code Playgroud)
假设您想更改 data.frame 本身。因为
test %>% parse_number(id_numbers)
Run Code Online (Sandbox Code Playgroud)
是相同的
parse_number(test, id_numbers)
Run Code Online (Sandbox Code Playgroud)
并且test不是字符向量,它是 data.frame,因此您会收到错误。