【发布时间】:2012-06-11 20:36:52
【问题描述】:
我想将一列数字转换为数字,但某些单元格显示“新建”和“已删除”,我想将其保留为字符。
如果我使用as.numeric(df$col1),数字会转换为数字,但单词会被强制转换为“NA”值。
有什么方法可以在防止这种强制转换的同时将所有数字转换为数字?
【问题讨论】:
标签: r
我想将一列数字转换为数字,但某些单元格显示“新建”和“已删除”,我想将其保留为字符。
如果我使用as.numeric(df$col1),数字会转换为数字,但单词会被强制转换为“NA”值。
有什么方法可以在防止这种强制转换的同时将所有数字转换为数字?
【问题讨论】:
标签: r
你不能用向量来做,因为向量只能包含一个类型。但是,您可以使用列表来完成。
Data <- data.frame(col1=c("1","2","New","3","Gone"), stringsAsFactors=FALSE)
List <- lapply(as.list(Data$col1), type.convert, as.is=TRUE)
【讨论】:
type.convert 我希望我早点知道这个功能。
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 相同。我错过了什么?
as.numeric(x) 之外,还需要一个适当的函数来执行任何处理 OP 所需的操作。给出一个更完整的问题,我很乐意给出一个更好的答案。但这种方式将有趣的探索部分留给了 OP。