【问题标题】:Dataframe from a vector and a list of vectors by replicating elements通过复制元素来自向量和向量列表的数据框
【发布时间】:2022-08-03 01:13:38
【问题描述】:

我有一个相同长度的向量和列表。该列表包含任意长度的向量,如下所示:

vec1 <- c(\"a\", \"b\", \"c\")

list1 <- list(c(1, 3, 2),
              c(4, 5, 8, 9),
              c(5, 2))

什么是创建数据帧的最快、最有效的方法,以便 vec1 的元素被复制与其在 list1 中的索引相对应的次数?

预期输出:

#   col1 col2
# 1    a    1
# 2    a    3
# 3    a    2
# 4    b    4
# 5    b    5
# 6    b    8
# 7    b    9
# 8    c    5
# 9    c    2

我已经包含了一个整洁的解决方案作为答案,但我想知道是否还有其他方法可以完成这项任务。

    标签: r list dataframe vector tibble


    【解决方案1】:

    base R 中,将list 的名称设置为'vec1',并使用stack 返回一个两列data.frame

    stack(setNames(list1, vec1))[2:1]
    

    -输出

      ind values
    1   a      1
    2   a      3
    3   a      2
    4   b      4
    5   b      5
    6   b      8
    7   b      9
    8   c      5
    9   c      2
    

    【讨论】:

      【解决方案2】:

      这个整洁的解决方案根据嵌套向量的长度复制 vec1 元素,然后将两个列表展平为一个小标题。

      library(purrr)
      library(tibble)
      
      tibble(col1 = flatten_chr(map2(vec1, map_int(list1, length), function(x, y) rep(x, times = y))),
                 col2 = flatten_dbl(list1))
      
      # # A tibble: 9 × 2
      #   col1   col2
      #   <chr> <dbl>
      # 1 a         1
      # 2 a         3
      # 3 a         2
      # 4 b         4
      # 5 b         5
      # 6 b         8
      # 7 b         9
      # 8 c         5
      # 9 c         2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-06
        • 2018-02-23
        • 2014-07-07
        • 1970-01-01
        相关资源
        最近更新 更多