例如,我的数据如下:
month city sale company
1 a 23 sony
1 a 12 lenovo
1 b 45 AAA
1 b 34 BBB
1 c 67 CCC
1 c 35 sony
1 d 65 DDD
2 a 87 sony
2 a 65 lenovo
2 b 67 AAA
2 b 45 BBB
2 c 87 CCC
2 c 54 sony
2 d 43 DDD
我按
排序数据library(doBy)
sort <- orderBy(~month+city+sale,data=data)
结果应该与上面的数据一样。
然后我想每个月提取每个城市中销售额最大的行,也就是说,我应该将1,3,5,7,8,10,11,13行提取到新的矩阵并导出它作为一个excel文件。
我怎么能这样做?实际数据更复杂,有数千条线。
答案 0 :(得分:0)
您可以使用split-apply-combine按公司/月份对进行拆分,找到所需的行,然后将结果合并在一起。
以下是你在基地R中的表现:
do.call(rbind, lapply(split(dat, paste(dat$month, dat$city)),
function(x) x[which.max(x$sale),]))
# month city sale company
# 1 a 1 a 23 sony
# 1 b 1 b 45 AAA
# 1 c 1 c 67 CCC
# 1 d 1 d 65 DDD
# 2 a 2 a 87 sony
# 2 b 2 b 67 AAA
# 2 c 2 c 87 CCC
# 2 d 2 d 43 DDD
对split
的调用按月/城市对分解数据框,lapply
提取具有最大销售额的行,do.call
使用rbind
将所有内容全部分开一起进入最终的数据框架。