【问题标题】:Merge named vectors in different sizes into data frame将不同大小的命名向量合并到数据框中
【发布时间】:2021-12-02 18:02:14
【问题描述】:

我有一些不同的命名向量,我想将它们组合成一个汇总操作的日期框架。

 adjust balance   drive    idle   other    pick putdown replace    sort    wait 
      4       9      16      82       4     350      61      16      26      18 
   walk 
     14 

 adjust balance   drive    idle    pick putdown replace    sort  unload    walk 
      1      42      14      47     385     118       4      83      19       7 

我希望它是这样的:

 adjust balance   drive  
      5       51      30  

等等。

我发现它非常具有挑战性,因为它们是命名向量 非常感谢您的帮助,谢谢!

【问题讨论】:

    标签: r dataframe vector merge sum


    【解决方案1】:

    如果我们要添加两个向量之间匹配的所有元素:

    # Resolve the matching names of the vectors:
    # vec_nm_order => character vector
    vec_nm_order <- intersect(
       names(vec1),
       names(vec2)
    )
    
    # Add the related scalars together:
    # named integer vector => stdout(console)
    vec1[vec_nm_order] + vec2[vec_nm_order]
    

    如果我们只想添加调整、平衡、驱动的值:

    # Choose the names (keys) of elements we want to add together:
    # vec_nm_order => character vector
    vec_nm_order <- c(
       "adjust", "balance", "drive"
    )
    
    # Add the related scalars together:
    # named integer vector => stdout(console)
    vec1[vec_nm_order] + vec2[vec_nm_order]
    

    【讨论】:

      【解决方案2】:

      我们可以像下面这样使用aggregate + stack

      aggregate(. ~ ind, rbind(stack(vec1), stack(vec2)), sum)
      

      【讨论】:

      • 托马斯的回答很棒。非常优雅。
      【解决方案3】:

      您可以转换为data.frame 并使用dplyr 包按名称分组并将数字相加。

      library(dplyr)
      vec <- c(4, 9, 16, 1, 42, 14)
      names(vec) <- c("adjust", "balance", "drive", "adjust", "balance", "drive")
      data.frame(values = vec, name = names(vec)) %>% group_by(name) %>% summarise(values = sum(values))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多