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

5

我正在使用 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()。有人可以解释一下为什么我会出现这个错误以及如何修复吗?


2
%>% 将你的 tibble 作为第一个参数传递给 parse_number()parse_number(test$id_numbers) 能工作吗?或者你想要一个新列,并且需要 mutate(newcol = parse_number(id_numbers)) 吗? - Hobo
谢谢你们两个!我完全忘记了在我的调用中没有使用“mutate”。 - J.Sabree
1
@MrFlick 我认为你应该发布一个答案。这个评论虽然短,但对其他人可能很有用。有两个关闭作为错别字的投票,但这不是错别字,而是对函数使用的误解。 - Rui Barradas
1个回答

7

你不能直接将数据框传入 parse_number 这个函数中。你需要先将其传入 mutate 函数中:

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

假设你想要更改数据框本身。因为
test %>% parse_number(id_numbers)

是等同于

parse_number(test, id_numbers)

test并不是一个字符向量,而是一个数据框(data.frame),因此你会收到该错误信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接