【问题标题】:Multiply all values in each column of a data frame by another value based on matching column names根据匹配的列名将数据框每一列中的所有值乘以另一个值
【发布时间】:2023-03-22 01:10:02
【问题描述】:

我想找到一种有效的方法来将此数据框中每一列中的所有值相乘

dd <- data.frame(a=1:10,b=2:11,c=3:12)

具有与另一个“索引”数据框上的该列的名称相对应的值(如以下任一示例)

d.1 <- data.frame(p=c("a","b","c"),q=3:5)
d.2 <- data.frame(a=3,b=4,c=5)

有没有for循环的方式来实现这个?

【问题讨论】:

    标签: r for-loop multiple-columns


    【解决方案1】:

    如果我们使用“d.2”,我们可以复制第二个数据集并进行乘法

    dd[names(d.2)] <-  dd[names(d.2)] * d.2[col(dd[names(d.2)])]
    

    使用“d.1”

    dd[as.character(d.1$p)] <-  dd[as.character(d.1$p)] * d.1$q[col(dd[d.1$p])]
    

    【讨论】:

      【解决方案2】:

      我为您提供for 两种情况下的类似循环的策略: 使用 d.1:

      dd_new <- vector()
      
      for(i in 1:length(dd)){
        new_col <- dd[, i] * d.1$q[which(d.1$p==names(dd)[i])]
        dd_new <- as.data.frame(cbind(dd_new, new_col))
      }
      dd_new
      

      使用 d.2:

      dd_new <- vector()
      
      for(i in 1:length(dd)){
        new_col <- dd[, i] * d.2[, which(names(d.2)==names(dd)[i])]
        dd_new <- as.data.frame(cbind(dd_new, new_col))
      }
      dd_new
      

      【讨论】:

        猜你喜欢
        • 2021-05-06
        • 2016-05-11
        • 1970-01-01
        • 1970-01-01
        • 2019-01-20
        • 1970-01-01
        • 2020-11-12
        • 2020-05-23
        • 1970-01-01
        相关资源
        最近更新 更多