防止 R 在使用"as.numeric"时强制非数字字符串"NA"



我想将一列数字转换为数字,但是某些单元格显示"New"和"Gone",我想将其保留为字符。

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

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

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

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

data.frame 的列将始终是相同的类型。 因此,您不能在同一列中包含字符串"New"和数字 5。

但是,举个例子来帮助你上路:

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

根据您正在执行的操作,可以将其扩展以应用于您的特定情况。

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

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

然而,处理这种情况的常用技巧正如约书亚在他的回答中概述的那样。

最新更新