让我有这样一个数据框(df);
col1 col2 col3 col4 col5 col6
12 15 21 19 45 43
37 77 90 4 0 51
即;
df<-data.frame(col1=c(12,37),col2=c(15,77),col3=c(21,90),col4=c(19,4),col5=c(45,0),col6=c(43,51))
我想将df拆分成组,并用这些组组成一个列表。例如,让df分成2个相等的部分
DF1:
col1 col2 col3
12 15 21
37 77 90
DF2:
col4 col5 col6
19 45 43
4 0 51
并撰写一份清单:
列表[1]:
df1
列表[2]:
df2
主要目的是撰写清单。但是,分割数据帧的数量可以改变。我怎么能用R做这个?在任何帮助下我都会很高兴。非常感谢。
答案 0 :(得分:3)
这是另一种类似的方法
我们可以定义一个辅助函数,它将根据给定的n
splitdf <- function(df, n) {
indx <- matrix(seq_len(ncol(df)), ncol = n)
lapply(seq_len(n), function(x) df[, indx[, x]])
}
然后你可以玩不同的n
s
splitdf(df, 3)
# [[1]]
# col1 col2
# 1 12 15
# 2 37 77
#
# [[2]]
# col3 col4
# 1 21 19
# 2 90 4
#
# [[3]]
# col5 col6
# 1 45 43
# 2 0 51
或者
splitdf(df, 2)
# [[1]]
# col1 col2 col3
# 1 12 15 21
# 2 37 77 90
#
# [[2]]
# col4 col5 col6
# 1 19 45 43
# 2 4 0 51
或
splitdf(df, 1)
# [[1]]
# col1 col2 col3 col4 col5 col6
# 1 12 15 21 19 45 43
# 2 37 77 90 4 0 51
答案 1 :(得分:1)
使用split
将列和lapply
拆分为子集::
lapply(split(colnames(df),rep(c(1,2),each=ncol(df)/2)),
+ function(x)df[x])
$`1`
col1 col2 col3
1 12 15 21
2 37 77 90
$`2`
col4 col5 col6
1 19 45 43
2 4 0 51
通常更容易按行拆分data.frame,因此您只能使用拆分。在这里,你也可以使用transpose
:
lapply(split(as.data.frame(t(df)),rep(c(1,2),each=ncol(df)/2)),t)