我需要编写一个函数,它将接收一个分组数据框(来自dplyr),并为每个组制作一个图,标题描述了它的用途。踢球者是我不知道分组变量是什么,甚至不知道会有多少。
我使用groups
一起攻击了一些内容以获取分组变量,然后使用.[1,g]
访问该值,其中g
是分组变量名称的字符版本,如下所示
虽然我是dplyr的新手,但感觉这是错误的做法,也就是说,这并不是一种真正的本土方式。它在我做过的小测试中起作用,但我担心它会在一些我没有预料到的奇怪情况下失败。你们都会怎么做?是否有更多的dplyr
- ish方式吗?
奇怪的是,我所做的事实上是一个好主意,我已经把它作为答案发布给你们所有人投票。
答案 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)]
答案 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