【发布时间】: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