为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

沧海一幻觉 2019-07-23 16:25:48
如何将数据框列转换为数字类型?如何将数据框列转换为数字类型?
查看完整描述

3 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

由于(仍然)没有人得到复选标记,我认为你有一些实际问题,主要是因为你没有指定你想要转换成什么类型的矢量numeric。我建议你应该应用transform函数来完成你的任务。


现在我要证明某些“转换异常”:


# create dummy data.frame

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)

让我们一瞥 data.frame


> d

  char fake_char fac char_fac num

1    a         1   1        a   1

2    b         2   2        b   2

3    c         3   3        c   3

4    d         4   4        d   4

5    e         5   5        e   5

让我们运行:


> sapply(d, mode)

       char   fake_char         fac    char_fac         num 

"character" "character"   "numeric"   "numeric"   "numeric" 

> sapply(d, class)

       char   fake_char         fac    char_fac         num 

"character" "character"    "factor"    "factor"   "integer" 

现在你可能会问自己“哪里有异常?” 嗯,我碰到了很奇特的事情R,这是不是在最混杂的东西,但它可以迷惑你,特别是如果你滚进睡前阅读。


这里是:前两列是character。我故意打电话给第二个fake_char。找出这个character变量与Dirk在他的回复中创建的变量的相似性。它实际上是一个numerical转换为的向量character。3 次和4 次的列是factor,最后一个是“纯粹的” numeric。


如果使用transform函数,则可以转换fake_char为变量本身numeric,而不是char变量本身。


> transform(d, char = as.numeric(char))

  char fake_char fac char_fac num

1   NA         1   1        a   1

2   NA         2   2        b   2

3   NA         3   3        c   3

4   NA         4   4        d   4

5   NA         5   5        e   5

Warning message:

In eval(expr, envir, enclos) : NAs introduced by coercion

但如果你在做同样的事情,fake_char和char_fac,你会很幸运,并摆脱无NA的:


> transform(d, fake_char = as.numeric(fake_char), 

               char_fac = as.numeric(char_fac))


  char fake_char fac char_fac num

1    a         1   1        1   1

2    b         2   2        2   2

3    c         3   3        3   3

4    d         4   4        4   4

5    e         5   5        5   5

如果您保存已转换data.frame并检查mode并且class,您将获得:


> D <- transform(d, fake_char = as.numeric(fake_char), 

                    char_fac = as.numeric(char_fac))


> sapply(D, mode)

       char   fake_char         fac    char_fac         num 

"character"   "numeric"   "numeric"   "numeric"   "numeric" 

> sapply(D, class)

       char   fake_char         fac    char_fac         num 

"character"   "numeric"    "factor"   "numeric"   "integer"

因此,结论是:是的,您可以将character矢量转换为numeric一个,但numeric前提是它的元素是“可转换”的。如果character向量中只有一个元素,那么在尝试将该向量转换为numerical1 时会出错。


只是为了证明我的观点:


> err <- c(1, "b", 3, 4, "e")

> mode(err)

[1] "character"

> class(err)

[1] "character"

> char <- as.numeric(err)

Warning message:

NAs introduced by coercion 

> char

[1]  1 NA  3  4 NA

现在,只是为了好玩(或练习),尝试猜测这些命令的输出:


> fac <- as.factor(err)

> fac

???

> num <- as.numeric(fac)

> num

???

亲切的问候帕特里克伯恩斯!=)


查看完整回答
反对 回复 2019-07-23
?
跃然一笑

TA贡献1826条经验 获得超6个赞

对我有帮助的东西:如果要转换的变量范围(或者只有一个变量),你可以使用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)


查看完整回答
反对 回复 2019-07-23
?
LEATH

TA贡献1936条经验 获得超6个赞

如果x是dataframe的列名dat,并且x是因子类型,请使用:

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


查看完整回答
反对 回复 2019-07-23
  • 3 回答
  • 0 关注
  • 2182 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信