将多维数组从 R 导出到电子表格
exporting a multidimensional array from R to a spreadsheet
所以我试图将多维数组从 R 导出到 excel、google 工作表或一些类似的电子表格程序中。我也可以导出到文本文件,只要它是我需要的格式即可。我也上网了,但是进步不大。
注意:我有一些编程经验(大约 4 个学期),但对 R 比较陌生。我和另外 3 个人一起工作,他们之前几乎没有编程经验。
我们的数组是 7x100x100(尽管我以后可能不得不把它变大)。
我已经能够将它导出到 excel 电子表格中,但是它的格式化方式让我的工作变得有点困难。所以我有一百个 7x100 矩阵,excel 只是将它们并排(水平)放置。我想以一种更容易区分矩阵的方式导出它。
举个例子...如果我有一个尺寸为 2x3x4 的多维数组,并且我在 RStudio 中(在控制台中)打印结果,这就是显示的内容:
, , 1
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
, , 2
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
, , 3
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
, , 4
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
我喜欢我如何区分每个 2x3 矩阵,因为它们一个接一个地堆叠(但垂直,而不是水平)
然而,在 excel,这是我得到的:
这是我在上面的例子中使用的代码。
results <- array(0, dim = c(2,3,4))
write.csv(results,"test3.csv")
我想以某种方式对其进行修改,以便矩阵彼此区分,或者使它们垂直堆叠而不是水平堆叠。
注意:我们的实际数据不仅仅是一堆零...这只是一个例子,以使其更简单。最终,我们将生成 7x100 矩阵以在 for 循环中放入此数组,我们需要以一种便于稍后分析数据的方式保存每个生成的矩阵。
感谢您提供的任何帮助!!!我试着说得具体一点,但如果有任何其他信息有用,请告诉我。
这里有两个选项,一个是用基数 R apply
来制作矩阵,另一个是 dplyr
解决方案。首先,我用值 1:24
重新创建了数组,以便更容易检查所有内容是否就位,而不是检查是否所有内容都为 0.
library(tidyverse)
arr <- array(1:24, dim = c(2,3,4))
您可以跨列创建一个大矩阵,其中较小的 table 基本上垂直堆叠。然后,您可以将其设为数据框或将其写入文件。
apply(arr, MARGIN = 2, function(a) as.matrix(a))
#> [,1] [,2] [,3]
#> [1,] 1 3 5
#> [2,] 2 4 6
#> [3,] 7 9 11
#> [4,] 8 10 12
#> [5,] 13 15 17
#> [6,] 14 16 18
#> [7,] 19 21 23
#> [8,] 20 22 24
在第二种方式中,我从 获得了第一行(lapply
调用); returns 四个矩阵的列表。之后,您可以使用 purrr::imap_dfr
映射矩阵并创建数据框,从而产生一个数据框。这里的一个额外好处是您可以 mutate
一列来标记,例如table 每个观察来自什么。
#
n3 <- dim(arr)[3]
lapply(1:n3, function (i) arr[,,i]) %>%
imap_dfr(function(mtx, i) {
as.data.frame(mtx) %>%
mutate(table = paste("table", i, sep = "_"))
})
#> V1 V2 V3 table
#> 1 1 3 5 table_1
#> 2 2 4 6 table_1
#> 3 7 9 11 table_2
#> 4 8 10 12 table_2
#> 5 13 15 17 table_3
#> 6 14 16 18 table_3
#> 7 19 21 23 table_4
#> 8 20 22 24 table_4
由 reprex package (v0.2.0) 创建于 2018-06-20。
所以我试图将多维数组从 R 导出到 excel、google 工作表或一些类似的电子表格程序中。我也可以导出到文本文件,只要它是我需要的格式即可。我也上网了,但是进步不大。
注意:我有一些编程经验(大约 4 个学期),但对 R 比较陌生。我和另外 3 个人一起工作,他们之前几乎没有编程经验。
我们的数组是 7x100x100(尽管我以后可能不得不把它变大)。 我已经能够将它导出到 excel 电子表格中,但是它的格式化方式让我的工作变得有点困难。所以我有一百个 7x100 矩阵,excel 只是将它们并排(水平)放置。我想以一种更容易区分矩阵的方式导出它。
举个例子...如果我有一个尺寸为 2x3x4 的多维数组,并且我在 RStudio 中(在控制台中)打印结果,这就是显示的内容:
, , 1
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
, , 2
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
, , 3
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
, , 4
[,1] [,2] [,3]
[1,] 0 0 0
[2,] 0 0 0
我喜欢我如何区分每个 2x3 矩阵,因为它们一个接一个地堆叠(但垂直,而不是水平)
然而,在 excel,这是我得到的:
这是我在上面的例子中使用的代码。
results <- array(0, dim = c(2,3,4))
write.csv(results,"test3.csv")
我想以某种方式对其进行修改,以便矩阵彼此区分,或者使它们垂直堆叠而不是水平堆叠。
注意:我们的实际数据不仅仅是一堆零...这只是一个例子,以使其更简单。最终,我们将生成 7x100 矩阵以在 for 循环中放入此数组,我们需要以一种便于稍后分析数据的方式保存每个生成的矩阵。
感谢您提供的任何帮助!!!我试着说得具体一点,但如果有任何其他信息有用,请告诉我。
这里有两个选项,一个是用基数 R apply
来制作矩阵,另一个是 dplyr
解决方案。首先,我用值 1:24
重新创建了数组,以便更容易检查所有内容是否就位,而不是检查是否所有内容都为 0.
library(tidyverse)
arr <- array(1:24, dim = c(2,3,4))
您可以跨列创建一个大矩阵,其中较小的 table 基本上垂直堆叠。然后,您可以将其设为数据框或将其写入文件。
apply(arr, MARGIN = 2, function(a) as.matrix(a))
#> [,1] [,2] [,3]
#> [1,] 1 3 5
#> [2,] 2 4 6
#> [3,] 7 9 11
#> [4,] 8 10 12
#> [5,] 13 15 17
#> [6,] 14 16 18
#> [7,] 19 21 23
#> [8,] 20 22 24
在第二种方式中,我从 lapply
调用); returns 四个矩阵的列表。之后,您可以使用 purrr::imap_dfr
映射矩阵并创建数据框,从而产生一个数据框。这里的一个额外好处是您可以 mutate
一列来标记,例如table 每个观察来自什么。
#
n3 <- dim(arr)[3]
lapply(1:n3, function (i) arr[,,i]) %>%
imap_dfr(function(mtx, i) {
as.data.frame(mtx) %>%
mutate(table = paste("table", i, sep = "_"))
})
#> V1 V2 V3 table
#> 1 1 3 5 table_1
#> 2 2 4 6 table_1
#> 3 7 9 11 table_2
#> 4 8 10 12 table_2
#> 5 13 15 17 table_3
#> 6 14 16 18 table_3
#> 7 19 21 23 table_4
#> 8 20 22 24 table_4
由 reprex package (v0.2.0) 创建于 2018-06-20。