16

私は大きなデータセットを持っています (しかし、以下は例えば小さなものです)。データフレームを分割して、分割に使用したラベルに対応する複数のテキスト ファイルに出力したいと考えています。

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

今分割

> 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

outputcoutputk、およびの名前で .table を書きたいと思いoutputlます。したがって、出力は共通の接頭辞の後にグループ化変数のラベル名が続きます。

write.table (spt1) 
4

2 に答える 2

16

spt1 の名前に対して lapply を使用すると、spt1 のデータフレームと、ファイルを作成するために貼り付けで使用できる名前にアクセスできます。

lapply(names(spt1), function(x){write.table(spt1[[x]], file = paste("output", x, sep = ""))})

必要に応じて、ペーストに共通の拡張子を追加できます。

于 2012-04-03T22:11:04.740 に答える
10

非常に高速data.tableなソリューションを使用することもできます。この場合、 を に分割する必要はありませdataframelist

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]

出力を保持したい場合はvar1、これを行うことができます:

mydata[, fwrite(copy(.SD)[, var1 := var1] paste0("output", var1,".csv")), by = var1]

ps。fwriteこの回答では、まだ開発バージョンの を使用していることに注意してくださいdata.tableインストール手順については、こちらを参照してくださいwrite.csv単純にorを使用することもできますwrite.tableが、大きなデータセットを扱っている場合はおそらく高速なソリューションが必要であり、fwrite確かに最速の代替手段の 1 つです

于 2016-05-19T16:03:35.300 に答える