3

次のような関数を作成したいと思いますsplitdf(columnA + columnB ~ ., dataframe)

の可能なペアごとにサブデータフレームのリストを返すようにしcolumnA and columnBます。に似ているtableか、xtabs

だから、

> a <- data.frame(x=1:3, y=1:3, z=1:9)
> a
  x y z
1 1 1 1
2 2 2 2
3 3 3 3
4 1 1 4
5 2 2 5
6 3 3 6
7 1 1 7
8 2 2 8
9 3 3 9

私は期待している:

x = 1, y = 1, 
      x y z
     1 1 1
     1 1 4
     1 1 7

x = 2, y = 2, 
      x y z
     2 2 2
     2 2 5
     2 2 8

x = 3, y = 3, 
      x y z
     3 3 3
     3 3 6
     3 3 9

アップデート

私はそれに気づき、split働くdlplyことができました。しかし、どちらもカテゴリ名を操作する良い方法を提供してくれませんか? これらの名前を意味のあるものにするにはどうすればよいですか? x = 1, y = 1$の代わりに見たい1.1

4

2 に答える 2

6

これは、あなたの望むことですか?

> library (plyr)
> dlply(a, .(x, y))
$`1.1`
  x y z
1 1 1 1
2 1 1 4
3 1 1 7

$`2.2`
  x y z
1 2 2 2
2 2 2 5
3 2 2 8

$`3.3`
  x y z
1 3 3 3
2 3 3 6
3 3 3 9

アップデート

> z <- dlply(a, .(x, y))
> names(z) <- dlply(a, .(x, y), function(x) sprintf("x = %d, y = %d", x$x[1], x$y[1]))
> z
$`x = 1, y = 1`
  x y z
1 1 1 1
2 1 1 4
3 1 1 7

$`x = 2, y = 2`
  x y z
1 2 2 2
2 2 2 5
3 2 2 8

$`x = 3, y = 3`
  x y z
1 3 3 3
2 3 3 6
3 3 3 9
于 2013-11-12T11:32:11.273 に答える