R:将data.frame中未知列类的字符转换为数字

R:将data.frame中未知列类的字符转换为数字,r,dataframe,character,numeric,R,Dataframe,Character,Numeric,在这本书中,有一个关于如何将字符转换成数字的很好的讨论。 也许我在那篇文章中遗漏了一些东西,但是如果不知道哪些列是“可转换的”(如果有的话),该怎么办? 是否可以检查可转换性? 此外,我通常会抑制因子转换(更像字符),所以字符应该是字符(而不是因子) 如何为任何事先未知的data.frame实现这一点?您可以这样做(虽然不是很优雅) fun1但是很有效。“namesYou can dodf1 Try?”namesYou can dodf1 Try?”namesYou can can dodf1

在这本书中,有一个关于如何将字符转换成数字的很好的讨论。 也许我在那篇文章中遗漏了一些东西,但是如果不知道哪些列是“可转换的”(如果有的话),该怎么办? 是否可以检查可转换性? 此外,我通常会抑制因子转换(更像字符),所以字符应该是字符(而不是因子)


如何为任何事先未知的data.frame实现这一点?

您可以这样做(虽然不是很优雅)


fun1但是很有效。“namesYou can do
df1 Try
?”namesYou can do
df1 Try
?”namesYou can can do
df1 Try
。在
fun1中,这将无法按预期工作。更好的方法是使用
df[]将所有字符转换为字符
df <- data.frame(a=as.character(c(NA, 1/3)), b=letters[1:2], c=c('1|2', '4|2'), d=as.character(3:4), stringsAsFactors = F)
str(f(df))
'data.frame':   2 obs. of  4 variables:
 $ a: num  NA 0.333
 $ b: chr  "a" "b"
 $ c: chr  "1|2" "4|2"
 $ d: int  3 4
fun1 <- function(i) {
  if (!all(is.na(as.numeric(df[, i])))){
    as.numeric(df[, i])
  } else {
    df[, i]
  }
}

df1 <- "names<-"(cbind.data.frame(lapply(seq_along(df), fun1),
                                  stringsAsFactors=FALSE), names(df))

> str(df1)
'data.frame':   2 obs. of  4 variables:
 $ a: num  NA 0.333
 $ b: chr  "a" "b"
 $ c: chr  "1|2" "4|2"
 $ d: num  3 4
convertiblesToNumeric <- function(x){
  x2 <- cbind.data.frame(lapply(seq_along(x), function(i) {
    if (!all(is.na(as.numeric(x[, i])))){
      as.numeric(x[, i])
      } else {
        x[, i]
        }
    }), stringsAsFactors=FALSE)
  names(x2) <- names(x)
  return(x2)
}

df1 <- convertiblesToNumeric(df)
> str(df1)
'data.frame':   2 obs. of  4 variables:
 $ a: num  NA 0.333
 $ b: chr  "a" "b"
 $ c: chr  "1|2" "4|2"
 $ d: num  3 4