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


当前回答

有一点对我很有帮助:如果要转换的变量范围(或者不止一个),可以使用sapply。

有点荒谬,举个例子:

data(cars)
cars[, 1:2] <- sapply(cars[, 1:2], as.factor)

假设第3列、第6-15列和第37列的数据帧需要转换为数字:

dat[, c(3,6:15,37)] <- sapply(dat[, c(3,6:15,37)], as.numeric)

其他回答

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

因数转换为数字:-

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

考虑到可能存在char列,这是基于@Abdou在获取列类型的excel表格自动回答:

makenumcols<-function(df){
  df<-as.data.frame(df)
  df[] <- lapply(df, as.character)
  cond <- apply(df, 2, function(x) {
    x <- x[!is.na(x)]
    all(suppressWarnings(!is.na(as.numeric(x))))
  })
  numeric_cols <- names(df)[cond]
  df[,numeric_cols] <- sapply(df[,numeric_cols], as.numeric)
  return(df)
}
df<-makenumcols(df)

使用下面的代码,您可以将所有数据帧的列转换为数字(X是我们想要转换它的列的数据帧):

as.data.frame(lapply(X, as.numeric))

要将整个矩阵转换为数字,你有两种方法: :

mode(X) <- "numeric"

or:

X <- apply(X, 2, as.numeric)

你也可以使用数据。矩阵函数将所有内容转换为数字,尽管要注意,因子可能无法正确转换,因此先将所有内容转换为字符会更安全:

X <- sapply(X, as.character)
X <- data.matrix(X)

如果我想同时转换成矩阵和数字,我通常使用最后一个

在我的PC (R v.3.2.3)中,apply或sapply给出错误。Lapply效果很好。

dt[,2:4] <- lapply(dt[,2:4], function (x) as.factor(as.numeric(x)))

蒂姆是对的,谢恩有个遗漏。以下是其他例子:

R> df <- data.frame(a = as.character(10:15))
R> df <- data.frame(df, num = as.numeric(df$a), 
                        numchr = as.numeric(as.character(df$a)))
R> df
   a num numchr
1 10   1     10
2 11   2     11
3 12   3     12
4 13   4     13
5 14   5     14
6 15   6     15
R> summary(df)
  a          num           numchr    
 10:1   Min.   :1.00   Min.   :10.0  
 11:1   1st Qu.:2.25   1st Qu.:11.2  
 12:1   Median :3.50   Median :12.5  
 13:1   Mean   :3.50   Mean   :12.5  
 14:1   3rd Qu.:4.75   3rd Qu.:13.8  
 15:1   Max.   :6.00   Max.   :15.0  
R> 

我们的data.frame现在有了因子列的摘要(counts)和as.numeric()的数值摘要(这是错误的,因为它得到了数值因子级别)以及as.numeric(as.character())的(正确的)摘要。