如何将数据帧列转换为数字类型?


当前回答

我会加一条评论(不能低评级)

只需要添加user276042和pangratz

dat$x = as.numeric(as.character(dat$x))

这将覆盖现有列x的值

其他回答

要将数据帧列转换为数字,你只需要做:-

因数转换为数字:-

data_frame$column <- as.numeric(as.character(data_frame$column))

如果数据帧有多种类型的列,一些字符,一些数字尝试以下转换列包含数值为数值:

for (i in 1:length(data[1,])){
  if(length(as.numeric(data[,i][!is.na(data[,i])])[!is.na(as.numeric(data[,i][!is.na(data[,i])]))])==0){}
  else {
    data[,i]<-as.numeric(data[,i])
  }
}

如果你遇到以下问题:

as.numeric(as.character(dat$x))

看看你的小数点。如果它们是“,”而不是“。”(如。"5,3")以上都不行。

一个潜在的解决方案是:

as.numeric(gsub(",", ".", dat$x))

我相信这在一些非英语国家是很常见的。

使用type.convert()和rapply()的通用方式:

convert_types <- function(x) {
    stopifnot(is.list(x))
    x[] <- rapply(x, utils::type.convert, classes = "character",
                  how = "replace", as.is = TRUE)
    return(x)
}
d <- data.frame(char = letters[1:5], 
                fake_char = as.character(1:5), 
                fac = factor(1:5), 
                char_fac = factor(letters[1:5]), 
                num = 1:5, stringsAsFactors = FALSE)
sapply(d, class)
#>        char   fake_char         fac    char_fac         num 
#> "character" "character"    "factor"    "factor"   "integer"
sapply(convert_types(d), class)
#>        char   fake_char         fac    char_fac         num 
#> "character"   "integer"    "factor"    "factor"   "integer"

如果x是dataframe dat的列名,x的类型是factor,使用:

as.numeric(as.character(dat$x))