首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >data.matrix对data.frame和data.matrix对as.matrix

data.matrix对data.frame和data.matrix对as.matrix
EN

Stack Overflow用户
提问于 2021-08-13 04:20:29
回答 1查看 285关注 0票数 2

data.matrix data.frame 有什么不同?

我理解matrixdata.frame是不同的,但我想特别了解data.framedata.matrix之间的区别。

matrix data.frame 是一样的吗?

R

  • Are的
  • matrixdata.matrixas.matrix的转换结果是一样的?或者它们是如何变化的?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-13 14:30:00

根据R文档(类型为?data.matrix),data.matrix是一个转换函数,用于将data.frame转换为一个矩阵,该矩阵自动将类别数据转换为数字。

即使data.frame包含纯粹的数字数据,转换有时也可能需要应用仅为矩阵定义的运算或函数,例如乘法:

代码语言:javascript
复制
> x <- mtcars[1:3, 1:2]
> x %*% c(1,2)
Error in x %*% c(1, 2) : requires numeric/complex matrix/vector arguments
> data.matrix(x) %*% c(1,2)
              [,1]
Mazda RX4     33.0
Mazda RX4 Wag 33.0
Datsun 710    30.8

as.matrix相比,defualt类型转换规则是不同的:

代码语言:javascript
复制
> x <- data.frame(a=as.factor(c("a","b")), b=c(1,2))
> as.matrix(x)
     a   b  
[1,] "a" "1"
[2,] "b" "2"
> data.matrix(x)
     a b
[1,] 1 1
[2,] 2 2

注意还有另一个函数:model.matrix,它用于从一个data.frame和一个公式中计算线性模型中使用的预测器数组。示例:

代码语言:javascript
复制
> m <- lm(mpg ~ poly(wt, 2), data=mtcars)
> head(model.matrix(m), n=3)
              (Intercept) poly(wt, 2)1 poly(wt, 2)2
Mazda RX4               1  -0.10963100  -0.04278415
Mazda RX4 Wag           1  -0.06282329  -0.09005145
Datsun 710              1  -0.16469889   0.03540332

或者直接,不需要在lm上绕道

代码语言:javascript
复制
> m <- model.matrix(~poly(wt, 2), data=mtcars)
> head(m, n=3)
              (Intercept) poly(wt, 2)1 poly(wt, 2)2
Mazda RX4               1  -0.10963100  -0.04278415
Mazda RX4 Wag           1  -0.06282329  -0.09005145
Datsun 710              1  -0.16469889   0.03540332
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68785671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档