如何将数据框按列拆分,例如每隔n列拆分一次?

5

假设我正在处理以下数据框:

Mydata <- data.frame(X1 = c(1,2,3,4,5,6,7,8,9,10),X2 = c(1,3,1,1,1,5,1,1,8,1),
                     X3 = c(1,2,3,4,5,6,7,8,9,10),X4 = c(1,3,1,1,1,5,1,1,8,1),
                     X5 = c(1,2,3,4,5,6,7,8,9,10),X6 = c(1,3,1,1,1,5,1,1,8,1),
                     X7 = c(1,2,3,4,5,6,7,8,9,10),X8 = c(1,3,1,1,1,5,1,1,8,1),
                     X9 = c(1,2,3,4,5,6,7,8,9,10),X10 = c(1,3,1,1,1,5,1,1,8,1),
                     X11 = c(1,2,3,4,5,6,7,8,9,10),X12 = c(1,3,1,1,1,5,1,1,8,1))

我想将这个数据框分成三个单独的数据框,第一个数据框包含X1 ~ X4列,第二个数据框包含X5 ~ X8列,第三个数据框包含X9 ~ X12列。我该如何编码以便能够对任意数量的列继续使用这种模式?


2
split.default(Mydata, ceiling(seq_along(Mydata)/4)) 做的是同样的事情,但不需要您知道有多少列。 - IceCreamToucan
1个回答

11
为了将Mydata每4列拆分,我们可以显式地使用split.default:
split.default(Mydata, rep(1:3, each = 4))

"默认"方法可以按列拆分数据框。只需按需设置分组变量。


对于平衡分组,gl 很方便(参见?gl)。我们可以在上面使用 gl(3, 4) 替代 rep(1:3, 4),这避免了从 "integer" 转换为 "factor" 的类型转换问题。

一般而言,对于"每 n 列"使用gl(ncol(Mydata) / n, n)(其中 n 必须能整除 ncol(Mydata))。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接