【问题标题】:How to assign a name to a new column that follows the structure column1*column2 in R?如何为遵循 R 中结构 column1*column2 的新列分配名称?
【发布时间】:2025-12-17 01:25:01
【问题描述】:

我有一个数据框,它由 Date、Brand1Index、Brand1Volume、Brand2Index、Brand2Volume 等列组成。 我现在想创建一个新的数据框来存储 (Brand1Index,Brand1volume), (Brand2Index, Brand2Volume) 的产品 --> 新数据框对于来自另一个数据框的每个品牌都有一列。我设法计算了每个品牌的产品,并将它们放入新的数据框中。但是,我希望新数据框的列以我使用的函数命名。例如,当新数据帧的 Column1 表示 Brand1Index x Brand1Volume 时,它​​应该这样命名。到目前为止,这些列被命名为“5 x 18.8”等。这些是列的值......下面是我的代码中的一个 sn-p:

    df <- NULL
    j <- 1

    for(i in seq(2, 10, 2)) {

      df[j] <- data[i]*data[i+1]

      j <- j+1
    }

    df <- data.frame(df)

【问题讨论】:

    标签: r dataframe loops


    【解决方案1】:

    假设您有如下数据框:

    df
    
    #    date brand1Index brand1Volume brand2Index brand2Volume
    #   <dbl>       <dbl>        <dbl>       <dbl>        <dbl>
    # 1     4           1            1           3            3
    # 2     5           2            2           2            2
    # 3     6           3            3           1            1
    

    你运行你的代码并得到:

    df2
    
    #   wrongName1 wrongName2
    #        <dbl>      <dbl>
    # 1          1          9
    # 2          4          4
    # 3          9          1
    

    那么你可以使用基于tidyverse的以下解决方案:

    library(dplyr)
    library(tibble)
    
    names <- df1 %>%
      colnames() %>%
      enframe() %>%
      filter(value != 'date') %>%
      mutate(group = cumsum(+(row_number() %% 2 == 1))) %>%
      group_by(group) %>%
      mutate(newName = str_c(value, collapse = '_x_')) %>%
      ungroup() %>%
      distinct(newName) %>%
      pull()
      
    df2 %>% rename_with(~ names, .cols = colnames(.))
    
    #   brand1Index_x_brand1Volume brand2Index_x_brand2Volume
    #                        <dbl>                      <dbl>
    # 1                          1                          9
    # 2                          4                          4
    # 3                          9                          1
    

    一次运行一行,您会看到第一个mutate() 创建了一个新变量,该变量将需要放在一起的名称配对在一个名称中。然后将成对的名称分组并放在一起。这些操作为我们提供了使用distinct() 删除并通过pull() 转换为向量的重复项。

    在向量中以正确的顺序使用正确的变量名称确保我们可以在最后一行正确重命名df2

    【讨论】:

    • 我要试试这个。看起来正是我想要的方式。但是,我自己找到了一个自己的解决方案,至少复制了第一个数据框的 colname。
    • 你能解释一下几行吗?在第 5 行和结尾之间你到底做了什么?
    • @user3683131:当然。我已经编辑了我的帖子以提供一些解释。