data.matrix 和 data.frame 有什么不同?
我理解matrix和data.frame是不同的,但我想特别了解data.frame和data.matrix之间的区别。
matrix 和 data.frame 是一样的吗?
R
matrix在data.matrix和as.matrix的转换结果是一样的?或者它们是如何变化的?发布于 2021-08-13 14:30:00
根据R文档(类型为?data.matrix),data.matrix是一个转换函数,用于将data.frame转换为一个矩阵,该矩阵自动将类别数据转换为数字。
即使data.frame包含纯粹的数字数据,转换有时也可能需要应用仅为矩阵定义的运算或函数,例如乘法:
> 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类型转换规则是不同的:
> 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和一个公式中计算线性模型中使用的预测器数组。示例:
> 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上绕道
> 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.03540332https://stackoverflow.com/questions/68785671
复制相似问题