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
...
是否可以更改数据框的结构?
答案 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')