【问题标题】:purrr to replace split, apply, output nested columnpurrr 替换拆分、应用、输出嵌套列
【发布时间】:2018-12-17 19:55:19
【问题描述】:

我了解如何使用 splitlapply 并使用基本 R 将列表输出组合在一起。我试图了解 purrr 方法来做到这一点。我可以使用基本 R 甚至使用 purrr* 来做到这一点,但我猜是因为我似乎在复制 order 变量,我做错了。感觉很笨拙,所以我不认为我明白。

使用数据子集的信息创建嵌套输出列的 tidyverse 方法是什么?

在数据框中创建嵌套列的基本 R 方法

library(tidyverse)
set.seed(10)

dat2 <- dat1 <- data_frame(
    v1 = LETTERS[c(1, 1, 1, 1, 2, 2, 2, 2)],
    v2 = rep(1:4, 2),
    from = c(1, 3, 2, 1, 3, 5, 2, 1),
    to = c(1, 3, 2, 1, 3, 5, 2, 1) + sample(1:3, 8, TRUE)
)

dat1 <- split(dat1, dat1[c('v1', 'v2')]) %>%
    lapply(function(x){ 
        x$order <- list(seq(x$from, x$to))
        x
    }) %>%
    {do.call(rbind, .)}

dat1
unnest(dat1)

我的 purrr 方法(正确的方法是什么?)

dat2 %>%
    group_by(v1, v2) %>%
    nest() %>%
    mutate(order = purrr::map(data, ~ with(., seq(from, to))))  %>%
    select(-data) 

期望的输出

  v1       v2  from    to order    
* <chr> <int> <dbl> <dbl> <list>   
1 A         1     1     3 <int [3]>
2 B         1     3     4 <int [2]>
3 A         2     3     4 <int [2]>
4 B         2     5     6 <int [2]>
5 A         3     2     4 <int [3]>
6 B         3     2     3 <int [2]>
7 A         4     1     4 <int [4]>
8 B         4     1     2 <int [2]>

【问题讨论】:

  • 是我误解了什么,还是您的数据示例的顺序有点混乱? outs 的元素最终的顺序与它们在数据框中的显示顺序不同...
  • @joran 不,我遗漏了一些东西......让我修复一下,这是一个玩具示例,我错过了这个
  • 好的,与此同时,我将分享我最初的想法,一旦你解决问题,这可能不相关:mutate(dat2,order = map2(.x = from,.y = to,.f = seq))
  • @joran 在这种特殊情况下就是这样。您可以发布答案吗?

标签: r tidyverse purrr


【解决方案1】:

在这种特殊情况下,您似乎正在寻找:

mutate(dat2,order = map2(.x = from,.y = to,.f = seq))

【讨论】:

  • 既然你的名字都很好,你也可以dat2 %&gt;% mutate(order = pmap(., seq))
【解决方案2】:

使用实验rap包:

remotes::install_github("romainfrancois/rap")

library(rap)

dat2 %>% 
  rap(order = ~ seq(from, to))

【讨论】:

    猜你喜欢
    • 2020-08-24
    • 2023-03-20
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 2020-01-20
    • 2018-08-16
    • 2021-12-13
    相关资源
    最近更新 更多