【发布时间】:2017-09-19 19:50:10
【问题描述】:
我正在自学 R tidyverse purr() 包,但在嵌套数据框列上实现 map() 时遇到问题。有人可以解释我缺少什么吗?
以基本 R ChickWeight 数据集为例,如果我首先像这样过滤饮食 #1,我可以轻松获得饮食 #1 下每个时间点的观察次数:
library(tidyverse)
ChickWeight %>%
filter(Diet == 1) %>%
group_by(Time) %>%
summarise(counts = n_distinct(Chick))
这很好,但我想一次为每种饮食都这样做,我认为嵌套数据并使用 map() 对其进行迭代将是一个好方法。
这就是我所做的:
example <- ChickWeight %>%
nest(-Diet)
实现这个地图功能然后实现我的目标:
map(example$data, ~ .x %>% group_by(Time) %>% summarise(counts = n_distinct(Chick)))
但是,当我尝试使用管道将相同的命令放入原始数据框的另一列时,它会失败。
example %>%
mutate(counts = map(data, ~ .x %>% group_by(Time) %>% summarise(counts = n_distinct(Chick))))
Error in eval(substitute(expr), envir, enclos) :
variable 'Chick' not found
为什么会这样?
我也在数据框拆分成列表上试过了,还是不行。
ChickWeight %>%
split(.$Diet) %>%
map(data, ~ .x %>% group_by(Time) %>% summarise(counts = n_distinct(Chick)))
【问题讨论】:
标签: r dplyr tidyverse magrittr purrr