我正在尝试使用 purrr 安排一个列表列。但是仅仅创建一个玩具示例就让我完全糊涂了:
s <- tibble(b = as.integer(runif(
n = 10, min = 0, max = 20
)))
s$e <-
map(s$b, ~ sample(seq(
as.Date('1990/01/01'), as.Date('2010/01/01'), by = "day"
), size = .))
我以为我可以做这样的事情:
s2 <- s %>% map('b') %>%
mutate(e = map(~ sample(seq(as.Date('1990/01/01'),
as.Date('2010/01/01'), by = "day"),
size = .)))
但是,这不起作用。我在这里想念什么?
现在,我想按升序排列列表列中的日期并提取第一个和最后一个日期。我该怎么做呢?我尝试了不同的变化
s %>% map('e') %>% map_df(~arrange(.))
但显然我在这里遗漏了一些东西......
我想要的输出是数据框中的新列表列,s
其中列表列中未排列的日期s$e
按升序排列在新的列表列s$new_arranged_dates
中。
> s
# A tibble: 10 × 3
b e new_arranged_dates
<int> <list> <list>
1 15 <date [15]> <date [15]>
2 0 <date [0]> <date [0]>
3 7 <date [7]> etc
4 6 <date [6]>
5 3 <date [3]>
6 14 <date [14]>
7 15 <date [15]>
8 13 <date [13]>
9 13 <date [13]>
10 11 <date [11]>
编辑 290817:
s2 <- s %>%
mutate(e = map(b,~ sample(seq(as.Date('1990/01/01'),
as.Date('2010/01/01'), by = "day"),
size = .))) %>% mutate(new_arranged_dates =map(e,~.[order(.)]))
得到我想要的。但是,我不明白为什么
s2 <- s %>%
mutate(e = map(b,~ sample(seq(as.Date('1990/01/01'),
as.Date('2010/01/01'), by = "day"),
size = .))) %>% mutate(new_arranged_dates=map(e,~arrange(.)))
结果是
Error in mutate_(.data, .dots = lazyeval::lazy_dots(...)) :
argument ".data" is missing, with no default