【问题标题】:How do I produce a column of numeric range of vectors in R?如何在 R 中生成一列数字范围的向量?
【发布时间】:2021-03-01 18:33:37
【问题描述】:

如何将 seq() 之类的函数应用于表示值范围的两列。

  start <- c(1,5,10,14,23)
  end <- c(4,9,13,22,28)
  df <- cbind(start, end) 
  df %<>% as.data.frame()

我尝试使用 mutate 函数来应用 seq,但无济于事。我意识到 mutate 函数不能应用单个列值。

  df  %>% mutate(range = seq(start, end)) 

任何迹象表示赞赏。

【问题讨论】:

    标签: r function dplyr seq data-wrangling


    【解决方案1】:

    使用purrr 包的简单解决方案是

    purrr::map2(df$start, df$end, seq)
    

    有输出

    [[1]]
    [1] 1 2 3 4
    
    [[2]]
    [1] 5 6 7 8 9
    
    [[3]]
    [1] 10 11 12 13
    
    [[4]]
    [1] 14 15 16 17 18 19 20 21 22
    
    [[5]]
    [1] 23 24 25 26 27 28
    

    请注意,由于开始和结束值不同,序列的长度也不同。因此,它们位于列表中,而不是 data.frame

    【讨论】:

      【解决方案2】:

      您可以按行应用seq 函数 -

      library(dplyr)
      
      df %>%
        rowwise() %>%
        mutate(range = list(seq(start, end))) %>%
        ungroup -> res
      
      res
      
      #  start   end range    
      #  <dbl> <dbl> <list>   
      #1     1     4 <int [4]>
      #2     5     9 <int [5]>
      #3    10    13 <int [4]>
      #4    14    22 <int [9]>
      #5    23    28 <int [6]>
      

      range 列包含值列表。

      res$range
      
      #[[1]]
      #[1] 1 2 3 4
      
      #[[2]]
      #[1] 5 6 7 8 9
      
      #[[3]]
      #[1] 10 11 12 13
      
      #[[4]]
      #[1] 14 15 16 17 18 19 20 21 22
      
      #[[5]]
      #[1] 23 24 25 26 27 28
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-20
        • 1970-01-01
        相关资源
        最近更新 更多