【发布时间】:2018-02-09 23:13:33
【问题描述】:
我正在整理嵌套数据框,但遇到了一些困难。我可以使用一种情况很好地重塑数据,但我希望逐个迭代整个数据帧。
我的数据如下所示:
df <- tibble(
case = c("a","a","b","b","c","c"),
year = c(1990,2000,1990,2000,1990,2000),
var1 = round(runif(6,0,1), 2),
var2 = round(runif(6,10,20), 2)
)
我可以使用 tidyr 只用一个案例执行我想做的任务
df %>%
filter( case == "a") %>%
gather(var, value, -c(1:2)) %>%
spread(year, value)
输出:
# case var `1990` `2000`
# <chr> <chr> <dbl> <dbl>
# 1 a var1 0.850 0.540
# 2 a var2 14.4 16.7
如何使用 purrr 或其他函数式编程工具来向量化此操作并对我的所有案例执行相同的操作并将它们绑定到一个数据帧中? “巢”和“地图”的某种组合?
谢谢!
【问题讨论】:
-
也许是
df %>% nest(-case) %>% mutate(output = map(data, ~gather(.x, var, val, -year) %>% spread(year, val))) %>% unnest(),但似乎有一种更优雅的方式来写它 -
啊:
df %>% gather(var, val, var1:var2) %>% spread(year, val)
标签: r functional-programming tidyr tidyverse purrr