我想将一列数字转换为数字,但有些单元格会显示“New”和“Gone”,我希望将其保留为字符。
如果我使用as.numeric(df$col1)
,则数字将转换为数字,但这些字词会被强制转换为“NA”值。
有什么方法可以将所有数字转换成数字,同时防止这种强制?
答案 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)))
但是,处理这种情况的常用技巧正如约书亚在答案中所述。