【问题标题】:How to calculate the total value based on multiple column values如何根据多列值计算总值
【发布时间】:2017-09-11 11:18:49
【问题描述】:

我有一个包含客户名称和区域数据的数据框。

我想计算每个客户的总面积,因为某些区域跨越多个楼层(例如,Client A 可能在 Floor 1 上具有 202,在 Floor 2 上可能有 248)。

我想创建一个包含总面积的新列。

我知道如何创建新列:

areas$new_area

而且我知道如何计算每个客户的总面积(手动):

sum(areas[areas$client == "Client A", "areas"])

我遇到的困难是遍历数据框并使整个过程自动化。

我想出了一个迭代数据框的部分解决方案,但它只计算位置 i 的每个客户端的每个区域值的总和(我知道这总是会发生,因为它只采用单个值area 列,当然):

for(i in 1:nrow(areas)){
  areas$new_area[i] <- sum(areas$areas[i])
}

另外,我怀疑/知道 apply 函数几乎可以肯定是这里采用的方法,但我不知道该使用哪一个,也不知道如何应用它(不是双关语)。

我如何a) 实现这一点,b) 以更简洁的方式实现它?

我的预期输出是这样的(或它的一些变体):

--------------------------------------
| Client | Floor | Area |  New Area  |
--------------------------------------
|   A    |   1   | 202  |    202     |
--------------------------------------
|   A    |   2   | 248  |    450     |
--------------------------------------
|   B    |   1   | 1000 |    1000    |
--------------------------------------
|   B    |   2   | 150  |    1150    |
--------------------------------------

我希望在末尾有一个新列,其中包含每个客户的所有面积值的总和(我的示例显示了一个累积总数,但它是否是累积的并不重要 - 这只是为了给出一个示例)。

【问题讨论】:

  • @agenis 我已经更新了问题。
  • 好的,在我看来,您需要的只是按组求和?如果是这种情况,这个答案可以帮助吗? stackoverflow.com/q/1660124/3871924

标签: r sum apply


【解决方案1】:
summedAreas <- aggregate(Area ~ Client, areas, sum)
allYourData <- merge(Area, summedAreas, by = "Client")

我更喜欢聚合而不是 tapply,因为我得到了一个不错的 data.frame,但是您可以使用

计算总数
tapply(X = areas$Area, INDEX = areas$Client, FUN = sum)

【讨论】:

    猜你喜欢
    • 2021-03-25
    • 2021-10-31
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多