gpt4 book ai didi

r - 如何将integer64值的数据帧转换为矩阵?

转载 作者:行者123 更新时间:2023-12-04 04:25:20 24 4
gpt4 key购买 nike

我有一个完全由 integer64 列组成的数据框,我想将其转换为矩阵。

library(bit64)
(dfr <- data.frame(x = as.integer64(10^(9:18))))
## x
## 1 1000000000
## 2 10000000000
## 3 100000000000
## 4 1000000000000
## 5 10000000000000
## 6 100000000000000
## 7 1000000000000000
## 8 10000000000000000
## 9 100000000000000000
## 10 1000000000000000000

不幸的是, as.matrix 没有给出正确的答案。
(m <- as.matrix(dfr))
## x
## [1,] 4.940656e-315
## [2,] 4.940656e-314
## [3,] 4.940656e-313
## [4,] 4.940656e-312
## [5,] 4.940656e-311
## [6,] 4.940656e-310
## [7,] 4.940656e-309
## [8,] 5.431165e-308
## [9,] 5.620396e-302
## [10,] 7.832953e-242

问题似乎是 integer64值存储为带有“integer64”类属性的数字值(加上一些使它们能够正确打印和执行算术的魔术),该值已被 as.matrix剥离。

我不能只做 class(m) <- "integer64",因为那会更改矩阵对象的类而不是其内容。

同样, mode(m) <- "integer64"给出错误的答案, typeof(m) <- "integer64"storage.mode(m) <- "integer64"抛出错误。

当然,我可以通过将列转换为double( dfr$x <- as.double(dfr$x))来解决问题,但是感觉应该有一种适当的方法来解决这个问题。

如何获得 integer64值的矩阵?

最佳答案

对于原始向量,直接分配dim属性似乎可行:

> z <- as.integer64(1:10)
> z
integer64
[1] 1 2 3 4 5 6 7 8 9 10
> dim(z) <- c(10, 1)
> z
integer64
[,1]
[1,] 1
[2,] 2
[3,] 3
[4,] 4
[5,] 5
[6,] 6
[7,] 7
[8,] 8
[9,] 9
[10,] 10

对于数据框,对列进行 cbind也可以:
> df <- data.frame(x=as.integer64(1:5), y=as.integer64(6:10))
> df
x y
1 1 6
2 2 7
3 3 8
4 4 9
5 5 10
> cbind(df$x, df$y)
integer64
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10

因此,对于任意数量的列, do.call是解决方法:
> do.call(cbind, df)
integer64
x y
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10

关于r - 如何将integer64值的数据帧转换为矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28262301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com