【问题标题】:UseMethod("type") error; no applicable method for 'type" applied to an object of class "c('double', 'numeric')"使用方法(“类型”)错误;没有适用于“类型”的方法应用于“c('double','numeric')”类的对象
【发布时间】:2026-01-11 05:20:08
【问题描述】:

在数据框中,我有一列包含数值和某些行的一些混合字符数据。我想删除所有带有字符数据的行,并用数字值保留这些行。我拥有的 df 是 600 万行,所以我只是制作了一个小对象来尝试解决我的问题,然后在更大范围内实施。

这是我所做的:

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

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

阅读此处其他 UseMethod 错误的答案(关于因素),我尝试将“a”更改为 as.character(a) 并再次尝试“b”。但是,我得到同样的错误。我试图简单地将任何字母值变成数字零,而我对这一切都很陌生。

【问题讨论】:

  • 如果将0 替换为"0" 会怎样?

标签: r stringr


【解决方案1】:

这里有几个问题,即使在这两行代码中也是如此。首先,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 万行数据框执行此操作是另一回事。请仔细考虑您想做什么,为我们提供更好的测试数据,然后再次提出您的问题。

【讨论】:

    【解决方案2】:

    在大型数据框上执行此操作可能有一种更有效的方法(例如,按列而不是按行),但要回答您关于每一行的具体问题a

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

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

    【讨论】:

      最近更新 更多