UseMethod(“ type”)错误;没有适用于类型“ c('double','numeric')的对象的'type'适用方法”

问题描述 投票:0回答:2

在数据框中,我有一列具有数字值,并且某些行中的某些字符数据混合在一起。我想删除所有包含字符数据的行,并将这些行保留为数字值。我拥有的df是600万行,因此我只是做了一个小对象来尝试解决我的问题,然后大规模实施。

这是我所做的:

a <- c("fruit", "love", 53)

b <- str_replace_all("^[:alpha:]", 0)

[在这里阅读有关其他UseMethod错误的答案(关于因素),我试图将“ a”更改为as.character(a),然后再次尝试“ b”。但是,我得到了同样的错误。我试图将任何字母值都简单地设置为数字零,而我在这方面还很新。

r stringr
2个回答
0
投票

[在大型数据帧上可能有一种更有效的方法(例如,按列而不是按行),但是要回答关于每行的特定问题a

as.numeric(stringr::str_replace_all(a, "[a-z]+", "0"))

请注意,替换值必须是字符(函数调用中的最后一个参数"0")。 (您可以通过以下方法从R控制台中查找文档:?stringr::str_replace_all


0
投票

即使在这两行代码中,这里也存在几个问题。首先,a是字符向量,因为它的第一个元素是字符。这意味着您的数字53被强制转换为字符。

> print(a)
[1] "fruit" "love"  "53" 

str_replace_all的语法错误。请参阅文档以了解如何正确使用它。但这不是您想要的,因为您想要数字。

您要做的第一件事是将a转换为数字。粗略的方法是]

>b <- as.numeric(a)
Warning message:
NAs introduced by coercion b
> b
[1] NA NA 53

然后是子集,仅将b中的数值包括在内:

> b <- b[!is.na(b)]
> b
[1] 53

但是,这是否就是您要处理的600万行数据帧的问题呢?请仔细考虑您要做什么,向我们提供更好的测试数据,然后再次提出您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.