【问题标题】:Restructuring data (horizontal to vertical) in R在 R 中重构数据(水平到垂直)
【发布时间】:2014-09-16 17:32:32
【问题描述】:

我有一个如下所示的数据集:

   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 列。

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

真诚地, 艾米

【问题讨论】:

  • 第 1 步:向数据提供商发送一封讨厌的电子邮件。

标签: r


【解决方案1】:

这似乎会按照您正在寻找的顺序为您提供您正在寻找的输出。

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

【讨论】:

    【解决方案2】:

    试试:

    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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-30
      • 2013-08-09
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多