【问题标题】:Multiplying Columns and Keeping Column Names [duplicate]乘以列并保留列名[重复]
【发布时间】:2021-01-12 06:00:03
【问题描述】:

我正在尝试将一组列乘以数据框中的另一列。同时也保持列名不变。例如,我有一个数据框 dat:

Company_Name Company_Location Cost Fund_1  Fund_2 
A                 SGD          15         10     NA
B                 LDN          85         NA     4
C                 NY           54         3      NA
D                 SGD          15         NA     6
E                 LDN          85         4      5

dat <- structure(list(Company_Name = c("A", "B", "C", "D", "E"), Company_Location = c("SGD", 
LDN", "NY", "SGD", "LDN"), Cost = c(15L, 85L, 54L, 15L, 
85L), Fund_1 = c(10L, NA, 3L, NA, 4L), Fund_2 = c(NA, 4L, NA, 
6L, 5L)), row.names = c(NA, -5L), class = c("tbl_df", "tbl", 
"data.frame"))

我想将 Fund_1 和 Fund_2 的 Cost 列加倍,并保持名称相同。即没有新列。所以 DF 如下所示;

Company_Name Company_Location Cost     Fund_1  Fund_2 
A                 SGD          15         150     NA
B                 LDN          85         NA     340
C                 NY           54         162     NA
D                 SGD          15         NA      90
E                 LDN          85         340     425

感谢任何帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以这样做:

    dat[4:5] <- dat$Cost * dat[4:5]
    
    # A tibble: 5 x 5
    #  Company_Name Company_Location  Cost Fund_1 Fund_2
    #  <chr>        <chr>            <int>  <int>  <int>
    #1 A            SGD                 15    150     NA
    #2 B            LDN                 85     NA    340
    #3 C            NY                  54    162     NA
    #4 D            SGD                 15     NA     90
    #5 E            LDN                 85    340    425
    

    如果您不知道列号,您可以使用grep 使用它们的名称模式来查找。

    cols <- grep('Fund', names(dat))
    dat[cols] <- dat$Cost * dat[cols]
    

    【讨论】:

    • 感谢@Ronak Shah
    【解决方案2】:

    如果您乐于使用 dplyr,您可以使用 mutate 和 cross:

    library(dplyr)
    
    dat %>% mutate(across(c(Fund_1, Fund_2), ~ Cost * .))
    
    # A tibble: 5 x 5
      Company_Name Company_Location  Cost Fund_1 Fund_2
      <chr>        <chr>            <int>  <int>  <int>
    1 A            SGD                 15    150     NA
    2 B            LDN                 85     NA    340
    3 C            NY                  54    162     NA
    4 D            SGD                 15     NA     90
    5 E            LDN                 85    340    425
    
    

    【讨论】:

      猜你喜欢
      • 2017-05-10
      • 2021-11-01
      • 2013-04-07
      • 2021-04-14
      • 2018-08-21
      • 2018-05-25
      • 2021-08-10
      • 1970-01-01
      • 2012-04-05
      相关资源
      最近更新 更多