答案 0 :(得分:3)
如果要将替代列合并为一列,则可以将split.default
与R的回收属性一起使用,以对其进行拆分。
new_df <- as.data.frame(sapply(split.default(df, c("A", "B")), unlist))
rownames(new_df) <- NULL
new_df
# A B
#1 1 11
#2 2 12
#3 3 13
#4 4 14
#5 5 15
#6 6 16
#7 7 17
#8 8 18
#9 9 19
#10 10 20
数据
df <- data.frame(a = 1:5, b = 11:15, c = 6:10, d = 16:20)
答案 1 :(得分:3)
另一个想法是在该列上使用布尔索引,将每个子集堆叠在一起并在最后绑定它们,即(使用@RonakShah的数据集)
setNames(cbind(stack(df[c(TRUE, FALSE)])[1],
stack(df[c(FALSE, TRUE)])[1]),
c('A', 'B'))
给出,
A B 1 1 11 2 2 12 3 3 13 4 4 14 5 5 15 6 6 16 7 7 17 8 8 18 9 9 19 10 10 20
答案 2 :(得分:1)
除了@Ronak Shah和@Sotos的解决方案之外,这是获取替代列索引并形成新数据框的另一种方法
idx <- seq(1,ncol(df),by = 2)
data.frame(A=unlist(df[idx]),B=unlist(df[-idx]),row.names = NULL)