繁体   English   中英

将数据帧拆分为 R 中的 n 组数据帧的函数

[英]Function to split a data frame into n groups of data frames in R

我正在尝试编写一个函数,该函数接受一个数据帧并将其拆分为多个数据帧,每个指定的列数。 例如,如果有一个看起来像这样的数据框:

df <- data.frame(
x1 = rnorm(1000),
x2 = rnorm(1000),
x3 = rnorm(1000),
x4 = rnorm(1000),
x5 = rnorm(1000),
x6 = rnorm(1000)
)

我想分割它,比如说,每隔一列并将其保存为它自己的数据框。 所以伪代码看起来像:

function(df){
split df every second column
save each group as it's own unique data frame (named A-C for this example)
}

最终结果意味着我有 3 个数据帧,其中数据帧 A 有两列(即 x1,x2),类似地 B 有两列(x3,x4),而 C 有两列(x5,x6)。

关于我如何实现这一目标的任何建议?

我们可以使用split.default分成 2 列,每列分成一个list

lst1 <- split.default(df, LETTERS[as.integer(gl(ncol(df), 2, ncol(df)))])

然后用write.csv保存数据集

lapply(names(lst1), function(x) write.csv(lst1[[x]], paste0(x, ".csv")))

我们可以使用split.default将数据拆分为每两列

temp <- split.default(df, gl(ncol(df)/2, 2))
temp

#$`1`
#          x1       x2
#1  -0.560476  1.22408
#2  -0.230177  0.35981
#3   1.558708  0.40077
#4   0.070508  0.11068
#5   0.129288 -0.55584
#6   1.715065  1.78691
#7   0.460916  0.49785
#8  -1.265061 -1.96662
#9  -0.686853  0.70136
#10 -0.445662 -0.47279

#$`2`
#         x3        x4
#1  -1.06782  0.426464
#2  -0.21797 -0.295071
#3  -1.02600  0.895126
#4  -0.72889  0.878133
#5  -0.62504  0.821581
#....
#....

我们可以将数据保留在列表中,或者如果需要在单独的数据框中,我们可以这样做

names(temp) <- LETTERS[1:3]
list2env(temp, .GlobalEnv)

数据

set.seed(123)
df <- data.frame(
  x1 = rnorm(10),
  x2 = rnorm(10),
  x3 = rnorm(10),
  x4 = rnorm(10),
  x5 = rnorm(10),
  x6 = rnorm(10)
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM