如何在批量中将所有因子变量更改为数值变量

mql*_*ner 2 variables r dataframe

我有一个数据框,其中包含大约100个我想要更改为数字类型的因子变量.我怎样才能完成整个数据框?我知道我可以通过使用此代码为每个变量执行此操作:dat$.Var2<-as.numeric(dat$.Var2) 但我想为很多变量执行此操作.这是一个示例数据框.

   dat <- read.table(text = " TargetVar  Tar_Var1    Var2       Var3
     0        0        0         7
     0        0        1         1
     0        1        0         3
     0        1        1         7
     1        0        0         5
     1        0        1         1
     1        1        0         0
     1        1        1         6
     0        0        0         8
     0        0        1         5
     1        1        1         4
     0        0        1         2
     1        0        0         9
     1        1        1         2  ", header = TRUE)
Run Code Online (Sandbox Code Playgroud)

Sve*_*ein 7

你可以使用lapply:

dat2 <- data.frame(lapply(dat, function(x) as.numeric(as.character(x))))

   TargetVar Tar_Var1 Var2 Var3
1          0        0    0    7
2          0        0    1    1
3          0        1    0    3
4          0        1    1    7
5          1        0    0    5
6          1        0    1    1
7          1        1    0    0
8          1        1    1    6
9          0        0    0    8
10         0        0    1    5
11         1        1    1    4
12         0        0    1    2
13         1        0    0    9
14         1        1    1    2


str(dat2)
'data.frame':   14 obs. of  4 variables:
 $ TargetVar: num  0 0 0 0 1 1 1 1 0 0 ...
 $ Tar_Var1 : num  0 0 1 1 0 0 1 1 0 0 ...
 $ Var2     : num  0 1 0 1 0 1 0 1 0 1 ...
 $ Var3     : num  7 1 3 7 5 1 0 6 8 5 ...
Run Code Online (Sandbox Code Playgroud)

  • 小心使用`as.numeric()` - 看看`as.numeric(factor(c(7,1)))` - 你可能需要`as.numeric(as.character(x))` (6认同)
  • @ user1024441,`data.frame`本质上是一种特殊类型的`list`.如果您使用我描述的方法,您基本上直接替换列.另外,`lapply`通常比`sapply`更快,因为`sapply`无论如何都调用`lapply`,然后检查输出是否可以简化为数组(使用`simplify2array`函数).您可以自己检查一些基准测试,但我的快速测试显示即使使用这个小数据集,`lapply`也要快得多. (2认同)