z %>%
group_by(name) %>%
nest() %>%
mutate(n = map_int(data, nrow),
avg = map_dbl(data, ~ mean(.x$grade)),
ttl_time = map_dbl(data, ~ sum(.x$time)))
# # A tibble: 2 x 5
# name data n avg ttl_time
# <chr> <list> <int> <dbl> <dbl>
# 1 Bill <tibble [3 × 2]> 3 85 31
# 2 Sue <tibble [2 × 2]> 2 99 31
Обозначение формулы с ~
является сокращением, например, для function(.x) mean(.x$grade)
Ошибка OP действительно связана с тем фактом, что map
не может выполнять итерацию непосредственно для каждого элемента grade
из списка data
, по крайней мере, с этим синтаксисом.
data$grade
понимается как элемент списка data
с именем grade
, и такого элемента не существует.
Этот альтернативный синтаксис может помочь понять, как это достижимо:
z %>%
group_by(name) %>%
nest() %>%
mutate(n = map_int(data, nrow),
avg = map_dbl(map(data, "grade"), mean),
ttl_time = map_dbl(map(data, "time"), sum))
, где map(data, "grade")
извлекает каждый grade
компонент из элементов столбца списка data
.
Хотя это, на мой взгляд, менее читабельно, чем первое предложение.