dplyr+purr: n() 是指 map() 组,而不是本地组?

dplyr+purr: n() refers to map() groups, not local groups?

我有一个 parent 数据集嵌套多个数据集(即每个单元格都是一个小标题的小标题),我希望每个数据集在其中找到每个组的行数。使用单个数据集的标准方法就是 group_by(var) %>% mutate(nrow=n())

但是现在我通过 map() 调用对多个数据集执行此操作,看起来 n() 调用指的是 map() 进行的(隐式)分组,而不是group_by 在我的本地数据集中进行显式分组?

单个数据集的标准方法,n() returns 50:

iris %>%
  group_by(., Species) %>%
  mutate(nrow=n())

数据集的数据集:

 df <- data_frame(name=c("a", "b"), Data=list(iris, iris))
 df2 <- df %>%
          mutate(Data2=map(Data, ~group_by(., Species) %>%
                 mutate(nrow=n()) %>%
                 ungroup()))

但现在 n() 返回了 2?

df2[1,]$Data2[[1]]

如果您在 mutate 之外定义函数,它可以正常工作(我假设此输出是您想要的...)

fun <- function(x) {
  df <- group_by(x, Species) %>% 
    summarise(nrow = n())
}
df2 <- df %>%
  mutate(Data2=map(Data, fun))

df2$Data2
# [[1]]
# # A tibble: 3 x 2
# Species  nrow
# <fctr> <int>
# 1     setosa    50
# 2 versicolor    50
# 3  virginica    50
# 
# [[2]]
# # A tibble: 3 x 2
# Species  nrow
# <fctr> <int>
# 1     setosa    50
# 2 versicolor    50
# 3  virginica    50

从版本0.7.0开始可用的另一个选项是使用add_count(),它不会与map()冲突,而且无论如何都简化了代码:

# standard case:
iris %>%
  add_count(Species)

## df of df:
df2 <- df %>%
  mutate(Data2=map(Data, ~add_count(., Species)))