如何更改数据框以便将行索引用作列标题?
我有这些数据:
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
...
我想得到它,以便我得到一个矩阵,索引为列标题,第二列在其索引下?
答案 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
解决方案(您没有提供列名,所以我认为它是V1
和V2
)
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