从分组数据框中获取组的描述

时间:2016-10-07 14:06:01

标签: r dplyr

我需要编写一个函数,它将接收一个分组数据框(来自dplyr),并为每个组制作一个图,标题描述了它的用途。踢球者是我不知道分组变量是什么,甚至不知道会有多少。

我使用groups一起攻击了一些内容以获取分组变量,然后使用.[1,g]访问该值,其中g是分组变量名称的字符版本,如下所示

虽然我是dplyr的新手,但感觉这是错误的做法,也就是说,这并不是一种真正的本土方式。它在我做过的小测试中起作用,但我担心它会在一些我没有预料到的奇怪情况下失败。你们都会怎么做?是否有更多的dplyr - ish方式吗?

奇怪的是,我所做的事实上是一个好主意,我已经把它作为答案发布给你们所有人投票。

2 个答案:

答案 0 :(得分:2)

library(data.table)

setDT(d) # or create directly as data.table

par(mfrow = c(2, 3))

d[, plot(y, main = paste(names(.BY), .BY, sep = "=", collapse = ", ")), by = .(A, B)]

enter image description here

答案 1 :(得分:0)

这就是我一起攻击的内容;如问题中所述,它使用groups来获取分组变量,然后使用.[1,g]访问该值,其中g是分组变量名称的字符版本,如下所示。 / p>

它不是制作绘图,而是创建一个标题为变量的数据框。

library(dplyr)
d <- as.tbl(data.frame(expand.grid(A=1:3,B=1:2,y=1:2)))

d1 <- d %>% group_by(A)
g <- unlist(lapply(groups(d1), paste))
d1 %>% do(data.frame(title=paste(paste(g, "=", .[1,g]), collapse=", "), stringsAsFactors=FALSE))

## Source: local data frame [3 x 2]
## Groups: A [3]
##  
##       A title
##   <int> <chr>
## 1     1 A = 1
## 2     2 A = 2
## 3     3 A = 3

d1 <- d %>% group_by(A, B)
g <- unlist(lapply(groups(d1), paste))
d1 %>% do(data.frame(title=paste(paste(g, "=", .[1,g]), collapse=", "), stringsAsFactors=FALSE))
## Source: local data frame [6 x 3]
## Groups: A, B [6]
##  
##       A     B        title
##   <int> <int>        <chr>
## 1     1     1 A = 1, B = 1
## 2     1     2 A = 1, B = 2
## 3     2     1 A = 2, B = 1
## 4     2     2 A = 2, B = 2
## 5     3     1 A = 3, B = 1
## 6     3     2 A = 3, B = 2