索引行作为列标题

时间:2015-02-09 12:09:23

标签: r

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

我有这些数据:

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

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

4 个答案:

答案 0 :(得分:2)

您只需使用矩阵函数并更改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)

答案 1 :(得分:1)

这是一个可能的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))

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您可以使用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