【问题标题】:Prevent R from coercing non-numeric strings to "NA" when using "as.numeric"防止 R 在使用“as.numeric”时将非数字字符串强制为“NA”
【发布时间】:2012-06-11 20:36:52
【问题描述】:

我想将一列数字转换为数字,但某些单元格显示“新建”和“已删除”,我想将其保留为字符。

如果我使用as.numeric(df$col1),数字会转换为数字,但单词会被强制转换为“NA”值。

有什么方法可以在防止这种强制转换的同时将所有数字转换为数字?

【问题讨论】:

    标签: r


    【解决方案1】:

    你不能用向量来做,因为向量只能包含一个类型。但是,您可以使用列表来完成。

    Data <- data.frame(col1=c("1","2","New","3","Gone"), stringsAsFactors=FALSE)
    List <- lapply(as.list(Data$col1), type.convert, as.is=TRUE)
    

    【讨论】:

    • +1 for type.convert 我希望我早点知道这个功能。
    【解决方案2】:

    data.frame 的列将始终属于同一类型。所以你不能将字符串“New”和数字 5 放在同一列中。

    然而,一个让你上路的例子:

    x <- c('New', 1, 'Gone', 2)
    
    ifelse(is.na(as.numeric(x)), x, as.numeric(x))
    

    根据您的具体情况,可以将其扩展为适用于您的具体情况。

    根据 Joshua 的评论,您可以在 ifelse 语句中使用函数:

    ifelse(is.na(as.numeric(x)), sprintf('its a string %s', x), sprintf('its a number %f', as.numeric(x)))
    

    但是,处理这种情况的常用技巧是 Joshua 在他的回答中概述的。

    【讨论】:

    • 我不明白...您的ifelse 结果与x 相同。我错过了什么?
    • 您说得对,先生!我试图说明一种在不放入 NA 的情况下从混合向量中获取数字的潜在方法。除了使用 as.numeric(x) 之外,还需要一个适当的函数来执行任何处理 OP 所需的操作。给出一个更完整的问题,我很乐意给出一个更好的答案。但这种方式将有趣的探索部分留给了 OP。
    猜你喜欢
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    相关资源
    最近更新 更多