r改变数据框架的结构

时间:2015-01-20 08:55:08

标签: r

1 abc acb bca 2 abc acb bca 3 abc acb bca
1 0.1 0.0 0.3 2 0.4 0.3 0.2 3 0.2 0.1 0.3
1 0.3 0.2 0.1 2 0.4 0.2 0.1 3 0.1 0.3 0.4

我有一个类似上面例子的数据框。相同的列名称发生了100次。数据框应如下所示:

number abc acb bca
1      0.1 0.0 0.3
1      0.3 0.2 0.1
2      0.4 0.3 0.2
2      0.4 0.2 0.1
...

是否可以更改数据框的结构?

1 个答案:

答案 0 :(得分:3)

如果列如图所示排序,

indx <- cumsum(grepl('^\\d+', colnames(df)))
res <- do.call(rbind, lapply(split(seq_along(indx), indx), function(x) {
         x1 <- df[x]
        colnames(x1)[1] <- 'number'
        x1}))
row.names(res) <- NULL
res
#  number abc acb bca
#1      1 0.1 0.0 0.3
#2      1 0.3 0.2 0.1
#3      2 0.4 0.3 0.2
#4      2 0.4 0.2 0.1
#5      3 0.2 0.1 0.3
#6      3 0.1 0.3 0.4

或者您可以转换为array然后转换为rbind

ar1 <- array(unlist(df), dim=c(2,4,3))
res2 <- do.call(rbind.data.frame, lapply(1:dim(ar1)[3],
                                function(i) ar1[,,i]))
colnames(res2) <- c('numbers', 'abc', 'acb', 'bca')