我有一个包含客户名称和区域数据的数据框。
我想计算每个客户的总面积,因为有些区域跨越多个楼层(例如,Client A
可能202
Floor 1
248
Floor 2
{1}})。
我想创建一个包含总面积的新列。
我知道如何创建新列:
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 |
--------------------------------------
我想在末尾添加一个新列,其中包含每个客户的所有区域值的总和(我的示例显示累计总数,但是它是否累积无关紧要 - 它仅仅是为了给出一个例子)。
答案 0 :(得分: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)