【问题标题】:How can I change all factor variables into numeric variables in a bulk [duplicate]如何将所有因子变量批量更改为数值变量[重复]
【发布时间】:2014-05-05 06:32:19
【问题描述】:

我有一个包含大约 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)

【问题讨论】:

  • 它们最初是如何成为因素的?

标签: r variables dataframe


【解决方案1】:

你可以使用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 ...

【讨论】:

  • 谢谢斯文,它有效。我可以使用 sapply 来完成这项任务吗?
  • 小心使用as.numeric() - 看看as.numeric(factor(c(7, 1))) 会发生什么 - 你可能需要as.numeric(as.character(x))
  • @user1024441,你为什么要使用sapplylapply 更合适。如果你想覆盖dat中的值(不是创建一个新的data.frame),你也可以直接使用dat[] &lt;- lapply(dat, function(x) as.numeric(as.character(x)))
  • @user1024441,data.frame 本质上是list 的一种特殊类型。如果您使用我描述的方法,您实际上是在直接替换列。此外,lapply 通常比sapply 快,因为sapply 无论如何都会调用lapply,然后检查输出是否可以简化为数组(使用simplify2array 函数)。你可以自己做一些基准测试,但我的快速测试表明,即使使用这个小数据集,lapply 也快得多。
猜你喜欢
  • 1970-01-01
  • 2017-05-18
  • 2017-05-25
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多