【问题标题】:Index row as column header索引行作为列标题
【发布时间】:2015-02-09 22:50:32
【问题描述】:

如何更改数据框以将行索引用作列标题?

我有这些数据:

0   1.052
1   0.542
2   0.496
3   0.402
4   0.278
0   5.115
1   4.329
2   4.121
3   4.075
4   4.0088
...

我想得到它,以便我得到一个矩阵,索引作为列标题,第二列在其索引下?

【问题讨论】:

  • 我只使用了我得到的第一个解决方案,因为它适用于我想要做的事情,我不介意错误消息,我对 R 真的很糟糕,所以我尽量避免做复杂的事情

标签: r


【解决方案1】:

你只需要使用矩阵函数,改变byrow的默认值即可:

## Create some example data
dd = data.frame(x = 0:4, y=runif(5*5))

## Specify the number of columns
## Order by Row   
matrix(dd[,2], ncol=length(unique(dd[,1])), byrow = TRUE)

【讨论】:

    【解决方案2】:

    这是一个可能的data.table 解决方案(您没有提供列名,所以我假设它是V1V2

    library(data.table)
    setDT(df)[, indx := cumsum(V1 == 0)]
    dcast(df, indx ~ V1, value.var = "V2")
    #    indx     0     1     2     3      4
    # 1:    1 1.052 0.542 0.496 0.402 0.2780
    # 2:    2 5.115 4.329 4.121 4.075 4.0088
    

    甚至更简单(@akrun 提出)

    library(reshape2) 
    acast(df, cumsum(V1 == 0) ~ V1, value.var = 'V2')
    

    数据

    df <- structure(list(V1 = c(0L, 1L, 2L, 3L, 4L, 0L, 1L, 2L, 3L, 4L), 
          V2 = c(1.052, 0.542, 0.496, 0.402, 0.278, 5.115, 4.329, 4.121, 
          4.075, 4.0088)), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA, 
         -10L))
    

    【讨论】:

    • 基本上,如果 OP 想要矩阵输出,我想说library(reshape2); acast(df, cumsum(V1==0)~V1, value.var='V2')
    • @akrun OP 说他们有一个数据框,但接受了一个矩阵解决方案,所以我不确定他们到底有什么
    【解决方案3】:

    不确定我是否理解您的意思,但您似乎愿意将列视为标题或键。在这种情况下,我只是建议使用data.table 包,尤其是setkey 函数

    【讨论】:

      【解决方案4】:

      你可以使用unstack:

      unstack(dat, y ~ x)
      

      其中dat 是您的数据框的名称,x 是第一个(指示符)列的名称,y 是第二个(值)列的名称。

      一个例子:

      set.seed(1)
      dat <- data.frame(x = 0:4, y = rnorm(10))
      #    x          y
      # 1  0 -0.6264538
      # 2  1  0.1836433
      # 3  2 -0.8356286
      # 4  3  1.5952808
      # 5  4  0.3295078
      # 6  0 -0.8204684
      # 7  1  0.4874291
      # 8  2  0.7383247
      # 9  3  0.5757814
      # 10 4 -0.3053884
      
      unstack(dat, y ~ x)
      #           X0        X1         X2        X3         X4
      # 1 -0.6264538 0.1836433 -0.8356286 1.5952808  0.3295078
      # 2 -0.8204684 0.4874291  0.7383247 0.5757814 -0.3053884
      

      【讨论】:

        猜你喜欢
        • 2020-04-24
        • 1970-01-01
        • 2015-11-28
        • 2021-07-09
        • 2014-07-10
        • 1970-01-01
        • 2018-09-08
        • 2021-09-23
        • 2021-12-23
        相关资源
        最近更新 更多