Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何将数据框拆分为给定列名的数据框列表?_R - Fatal编程技术网

R 如何将数据框拆分为给定列名的数据框列表?

R 如何将数据框拆分为给定列名的数据框列表?,r,R,我想构建一个函数,类似于splitdf(columnA+columnB~,dataframe) 因此,它将为每对可能的列a和列B返回子数据帧列表。它类似于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 更新 我意识到split和dlply可以工作

我想构建一个函数,类似于
splitdf(columnA+columnB~,dataframe)

因此,它将为每对可能的
列a和列B
返回子数据帧列表。它类似于
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
更新 我意识到
split
dlply
可以工作。然而,它们都没有为我提供一种操纵类别名称的好方法?如何使这些名称具有意义?我想看到的是
x=1,y=1
而不是$
1.1

这是你想要的吗

> 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
>z名称(z)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

使用基本
拆分功能

a <- data.frame(x = 1:3, y = 1:3, z = 1:9)
split(a, f = list(a$x, a$y))
## $`1.1`
##   x y z
## 1 1 1 1
## 4 1 1 4
## 7 1 1 7
## 
## $`2.1`
## [1] x y z
## <0 rows> (or 0-length row.names)
## 
## $`3.1`
## [1] x y z
## <0 rows> (or 0-length row.names)
## 
## $`1.2`
## [1] x y z
## <0 rows> (or 0-length row.names)
## 
## $`2.2`
##   x y z
## 2 2 2 2
## 5 2 2 5
## 8 2 2 8
## 
## $`3.2`
## [1] x y z
## <0 rows> (or 0-length row.names)
## 
## $`1.3`
## [1] x y z
## <0 rows> (or 0-length row.names)
## 
## $`2.3`
## [1] x y z
## <0 rows> (or 0-length row.names)
## 
## $`3.3`
##   x y z
## 3 3 3 3
## 6 3 3 6
## 9 3 3 9
## 

a@kohske它与
split
有何不同?注意
plyr
也知道如何处理公式:
dlply(a,~x+y)
。这更像是OP想要的界面。另外,如何使类别名称有意义?
a <- data.frame(x = 1:3, y = 1:3, z = 1:9)
split(a, f = list(a$x, a$y))
## $`1.1`
##   x y z
## 1 1 1 1
## 4 1 1 4
## 7 1 1 7
## 
## $`2.1`
## [1] x y z
## <0 rows> (or 0-length row.names)
## 
## $`3.1`
## [1] x y z
## <0 rows> (or 0-length row.names)
## 
## $`1.2`
## [1] x y z
## <0 rows> (or 0-length row.names)
## 
## $`2.2`
##   x y z
## 2 2 2 2
## 5 2 2 5
## 8 2 2 8
## 
## $`3.2`
## [1] x y z
## <0 rows> (or 0-length row.names)
## 
## $`1.3`
## [1] x y z
## <0 rows> (or 0-length row.names)
## 
## $`2.3`
## [1] x y z
## <0 rows> (or 0-length row.names)
## 
## $`3.3`
##   x y z
## 3 3 3 3
## 6 3 3 6
## 9 3 3 9
##