R语言中使用dcast时,如何通过fun.aggregate获取分组中间值?
解决方案
先拆解目标结果的规律:
- A的VAR1组原始值
[1,6,7],取升序排序后的倒数第二个元素(6); - B的VAR1组原始值
[2,5],取升序排序后的倒数第二个元素(2); - C的VAR1组仅一个值,直接取该值;
- 无对应数据的列(B、C的VAR2)填充0。
基于这个规律,自定义聚合函数,再结合dcast的fill参数实现需求:
# 自定义聚合函数:升序排序后取倒数第二个元素,元素数量不足2则取唯一值 custom_agg <- function(x) { sorted_x <- sort(x) if (length(sorted_x) >= 2) { return(sorted_x[length(sorted_x) - 1]) } else { return(sorted_x[1]) } } # 执行dcast,指定fill=0填充缺失值 result <- dcast(dataframe, col1~var, value.var="value", fun.aggregate=custom_agg, fill=0)
运行后就能得到完全匹配目标的输出结果。
内容的提问来源于stack exchange,提问作者FRECEENA FRANCIS
相关产品推荐
相关产品推荐

