1

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

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

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

4

2 回答 2

6

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

Data <- data.frame(col1=c("1","2","New","3","Gone"), stringsAsFactors=FALSE)
List <- lapply(as.list(Data$col1), type.convert, as.is=TRUE)
于 2012-06-11T20:41:07.380 回答
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)))

但是,处理这种情况的常用技术是约书亚在他的回答中概述的。

于 2012-06-11T20:39:41.607 回答