有效使用as.numeric()和factor()

Yod*_*oda 5 r numeric character

我有数百个字符向量从数据库导入到R中 - 每个向量的长度为6-7百万.它们是数字或因子数据,具有标签的字符(字母) - 要设置的级别,所有因子,都有一些NA.举个例子

vecA <- c("1",NA, "2",....,NA, "100")
vecB <- c("smith", NA, NA, ... , "jones")
Run Code Online (Sandbox Code Playgroud)

有没有一种有效的方法来强制vecA数字和vecB因素.问题是我不知道数据和因子向量在数据中的位置,逐个浏览它们是很繁琐的.

Jos*_*ien 7

我可能会使用tryCatch(),首先尝试将每个向量转换为类"numeric".如果as.numeric()抛出警告消息(就像输入向量包含非数字字符时那样),我会捕获警告,而是将向量转换为类"factor".

vecA <- c("1",NA, "2",NA, "100")
vecB <- c("smith", NA, NA, "jones")

myConverter <- function(X) tryCatch(as.numeric(X), 
                                    warning = function(w) as.factor(X))

myConverter(vecA)
# [1]   1  NA   2  NA 100
myConverter(vecB)
# [1] smith <NA>  <NA>  jones
# Levels: jones smith
Run Code Online (Sandbox Code Playgroud)