重组R中的数据(从水平到垂直)

  • 本文关键字:水平 垂直 数据 重组 r
  • 更新时间 :
  • 英文 :


我有一个看起来像这样的数据集:

   A       B     C   D    E      F     G    H     A      B    C  D    E      F    G  H
 -9.03    0.08   1   2  -8.52   0.06   3    4  -10.42   0.13  5  6  -10.04  0.1   7  8
  4.87    0.17   9   1   3.71   0.12   2    3    7.74   0.3   4  5   6.54   0.21  6  7

数据集只有2行长,但A-H列重复了98次。我想重组数据集,使其看起来像这样:

-9.03    0.08    1   2   4.87    0.17    9   1
-8.52    0.06    3   4   3.71    0.12    2   3
-10.42   0.13    5   6   7.74    0.3     4   5
-10.04   0.1     7   8   6.54    0.21    6   7

理想情况下,最终的数据集将是98行长,只有8列。

欢迎任何/所有建议!提前感谢!

真诚地,Amy

这似乎可以按照您要查找的顺序为您提供要查找的输出。

tmp <- read.table(text="A       B     C   D    E      F     G    H     A      B    C  D    E      F    G  H
-9.03    0.08   1   2  -8.52   0.06   3    4  -10.42   0.13  5  6  -10.04  0.1   7  8
4.87    0.17   9   1   3.71   0.12   2    3    7.74   0.3   4  5   6.54   0.21  6  7",
           header = TRUE, check.names = FALSE)
step1 <- do.call(cbind, split(c(as.matrix(tmp)), 1:8))
cbind(step1[, c(TRUE, FALSE)], step1[, c(FALSE, TRUE)])
#           1    3 5 7    2    4 6 8
# [1,]  -9.03 0.08 1 2 4.87 0.17 9 1
# [2,]  -8.52 0.06 3 4 3.71 0.12 2 3
# [3,] -10.42 0.13 5 6 7.74 0.30 4 5
# [4,] -10.04 0.10 7 8 6.54 0.21 6 7

尝试:

arr1 <-  aperm(array(c(as.matrix(dat1)),c(4,2,4)),c(3,1,2))
dim(arr1) <- c(4,8)
cbind(arr1[,c(TRUE,FALSE)], arr1[,c(FALSE,TRUE)])
#        [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
#[1,]  -9.03 0.08    1    2 4.87 0.17    9    1
#[2,]  -8.52 0.06    3    4 3.71 0.12    2    3
#[3,] -10.42 0.13    5    6 7.74 0.30    4    5
#[4,] -10.04 0.10    7    8 6.54 0.21    6    7

数据

dat1 <- structure(list(A = c(-9.03, 4.87), B = c(0.08, 0.17), C = c(1L, 
9L), D = c(2L, 1L), E = c(-8.52, 3.71), F = c(0.06, 0.12), G = c(3L, 
2L), H = c(4L, 3L), A = c(-10.42, 7.74), B = c(0.13, 0.3), C = c(5L, 
4L), D = c(6L, 5L), E = c(-10.04, 6.54), F = c(0.1, 0.21), G = c(7L, 
6L), H = c(8L, 7L)), .Names = c("A", "B", "C", "D", "E", "F", 
"G", "H", "A", "B", "C", "D", "E", "F", "G", "H"), class = "data.frame", row.names = c(NA, 
-2L))

最新更新