jon*_*jon 12 split r dataframe
我有大数据集(但例如以下是小数据集).我可以拆分数据帧然后我想输出到与用于拆分的lavel相对应的多个文本文件.
mydata <- data.frame (var1 = rep(c("k", "l", "c"), each = 5), var2 = rnorm(5),
var3 = rnorm(5))
mydata
var1 var2 var3
1 k 0.5406022 0.3654706
2 k -0.6356879 -0.9160001
3 k 0.2946240 -0.1072241
4 k -0.2609121 0.1036626
5 k 0.6206579 0.6111655
6 l 0.5406022 0.3654706
7 l -0.6356879 -0.9160001
8 l 0.2946240 -0.1072241
9 l -0.2609121 0.1036626
10 l 0.6206579 0.6111655
11 c 0.5406022 0.3654706
12 c -0.6356879 -0.9160001
13 c 0.2946240 -0.1072241
14 c -0.2609121 0.1036626
15 c 0.6206579 0.6111655
Run Code Online (Sandbox Code Playgroud)
现在拆分了
> spt1 <- split(mydata, mydata$var1)
> spt1
$c
var1 var2 var3
11 c 0.5406022 0.3654706
12 c -0.6356879 -0.9160001
13 c 0.2946240 -0.1072241
14 c -0.2609121 0.1036626
15 c 0.6206579 0.6111655
$k
var1 var2 var3
1 k 0.5406022 0.3654706
2 k -0.6356879 -0.9160001
3 k 0.2946240 -0.1072241
4 k -0.2609121 0.1036626
5 k 0.6206579 0.6111655
$l
var1 var2 var3
6 l 0.5406022 0.3654706
7 l -0.6356879 -0.9160001
8 l 0.2946240 -0.1072241
9 l -0.2609121 0.1036626
10 l 0.6206579 0.6111655
Run Code Online (Sandbox Code Playgroud)
我想的名字write.table outputc,outputk和outputl.因此,输出是公共前缀,后跟分组变量的标签名称.
write.table (spt1)
Run Code Online (Sandbox Code Playgroud)
Das*_*son 14
在spt1的名称上使用lapply将允许我们访问spt1中的数据帧以及我们可以在粘贴中使用的名称来创建我们的文件.
lapply(names(spt1), function(x){write.table(spt1[[x]], file = paste("output", x, sep = ""))})
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以在粘贴中添加公共扩展名.
您还可以使用非常快速的data.table解决方案.在这种情况下,不需要将其拆分dataframe为a list.
library(data.table) # v1.9.7 (devel version)
setDT(mydata) # convert your dataframe into a data.table
# save files
mydata[, fwrite(.SD, paste0("output", var1,".csv")), by = var1]
Run Code Online (Sandbox Code Playgroud)
如果您想保留var1输出,可以这样做:
mydata[, fwrite(copy(.SD)[, var1 := var1] paste0("output", var1,".csv")), by = var1]
Run Code Online (Sandbox Code Playgroud)
PS.请注意,这个答案使用fwrite,仍然在开发版本中data.table.转到此处获取安装说明.你可以简单地使用write.csv或者write.table,但是你可能想要一个快速的解决方案,以防你处理大数据集,fwrite并且肯定是最快的替代方案之一.