使用“as.numeric”时防止R将非数字字符串强制转换为“NA”

时间:2012-06-11 20:36:52

标签: r

我想将一列数字转换为数字,但有些单元格会显示“New”和“Gone”,我希望将其保留为字符。

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

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

2 个答案:

答案 0 :(得分:5)

您无法使用矢量执行此操作,因为矢量只能包含单个类型。但是,您可以使用列表来完成。

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

答案 1 :(得分:1)

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)))

但是,处理这种情况的常用技巧正如约书亚在答案中所述。