【问题标题】:R: How to perform a (user defined) calculation based on column criteria and percentage values of another df?R:如何根据列标准和另一个df的百分比值执行(用户定义的)计算?
【发布时间】:2016-01-17 00:24:33
【问题描述】:

我想根据另一个对象的列的标准使用另一个 df 的百分比来计算 data.frame 列的百分比值。以下是一些示例数据:

   df <- data.frame(Value = c(50,10,30,40),
                    object = c("apples","tomatoes", "apples","pears" ))

还有一个共享对象,其中包含对象的百分比:

share <- data.frame(object = c("tomatoes","pears", "apples" ),
                   percentage = c(90,75,80))

我的预期结果是:

  Value   object
1    40   apples
2     9 tomatoes
3    24   apples
4    30    pears

我只使用了一个对象,这段代码运行良好:

df[,1] <- df$Value * share$percentage /100 

但是如何对 df/share 中的不同对象执行此操作? “聚合”/“子集”或类似的东西?

编辑:到目前为止我已经尝试过了,我认为这可能是一种方法:

df[,1] <- aggregate(df$Value, by=df$object,FUN= function(x) {x$Value * share$percentage /100}   )

df[,1] <- apply(split(df, df$object) function(x) {x$Value * share$percentage / 100})

但是,函数似乎是错误的(我对函数也不是很熟悉:)。 请注意,我不想首先将dfshare 合并为已回答,因为我需要df 和order 的原始结构。所以我正在寻找一个简短的命令。我真的很感激你的想法。谢谢

【问题讨论】:

    标签: r aggregate subset apply


    【解决方案1】:

    您想要加权平均值吗?

    library(dplyr)
    
    df %>%
      inner_join(share) %>%
      group_by(object) %>%
      summarize(weighted_average = 
                  sum(Value * percentage) / sum(percentage) )
    

    【讨论】:

    • 这仅提供每个产品的平均值,但不适用于原始 df(请参阅我的预期结果,df 有 4 个对象,而您仅在 df 中生成三个级别)
    猜你喜欢
    • 2020-05-28
    • 2021-09-13
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多