【问题标题】:How do I apply weights to particular columns in a dataframe to aggregate a new 'score' column?如何将权重应用于数据框中的特定列以聚合新的“分数”列?
【发布时间】:2016-03-13 21:15:00
【问题描述】:

通过可重现的示例,假设您有以下 R 数据框:

set.seed(100)
df <- data.frame(Name=letters[1:5], Apples=sample(1:10, 5), Oranges=sample(1:10, 5), Bananas=sample(1:10, 5), Dates=sample(1:10, 5))

并且您想对数据框应用以下权重:

Weights <- c(Apples = "3", Oranges = "2", Bananas = "1")

生成一个新的总分列。因此,例如第一行(“a”行)将具有以下分数:

(3*4 + 2*5 + 1*7) = 29

和b行:

(3*3 + 2*8 + 1*8) = 33

我编写什么代码来自动执行此操作?

请注意,权重可能与数据框中的列的顺序不同,也不一定对数据框中的每个数字列都有权重(因此在此示例中,“日期”没有权重) .

【问题讨论】:

    标签: r dataframe matrix


    【解决方案1】:

    我们可以在将“df”中的列子集乘以“权重”中的相应元素(通过复制“权重”)后使用rowSums

    rowSums(df[names(Weights)]*as.numeric(Weights)[col(df[names(Weights)])])
    #[1] 29 33 24 20 36
    

    【讨论】:

      猜你喜欢
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-09
      • 2015-12-05
      • 1970-01-01
      • 2020-11-11
      • 1970-01-01
      相关资源
      最近更新 更多