在多个不同切片上应用聚合函数
发布时间:2020-12-14 05:00:03 所属栏目:百科 来源:网络整理
导读:我有一个数据数组,其中包含有关人员和项目的一些信息: person_id | project_id | action | time-------------------------------------- 1 | 1 | w | 1 1 | 2 | w | 2 1 | 3 | w | 2 1 | 3 | r | 3 1 | 3 | w | 4 1 | 4 | w | 4 2 | 2 | r | 2 2 | 2 | w |
我有一个数据数组,其中包含有关人员和项目的一些信息:
person_id | project_id | action | time -------------------------------------- 1 | 1 | w | 1 1 | 2 | w | 2 1 | 3 | w | 2 1 | 3 | r | 3 1 | 3 | w | 4 1 | 4 | w | 4 2 | 2 | r | 2 2 | 2 | w | 3 我想用一些名为“first_time”和“first_time_project”的字段来扩充这些数据,这些字段共同确定第一次看到该人的任何操作,并且第一次开发人员看到了对项目的任何操作.最后,数据应如下所示: person_id | project_id | action | time | first_time | first_time_project ------------------------------------------------------------------------ 1 | 1 | w | 1 | 1 | 1 1 | 2 | w | 2 | 1 | 2 1 | 3 | w | 2 | 1 | 2 1 | 3 | r | 3 | 1 | 2 1 | 3 | w | 4 | 1 | 2 1 | 4 | w | 4 | 1 | 4 2 | 2 | r | 2 | 2 | 2 2 | 2 | w | 3 | 2 | 2 我这样做的天真的方式是编写几个循环: for (pid in unique(data$person_id)) { data[data$pid==pid,"first_time"] = min(data[data$pid==pid,"time"]) for (projid in unique(data[data$pid==pid,"project_id"])) { data[data$pid==pid & data$project_id==projid,"first_time_project"] = min(data[data$pid==pid & data$project_id==projid,"time"] } } 现在,通过双嵌套循环看到这将变得非常缓慢并不是天才.但是,我无法想办法在R中处理这个问题.我有点仿效SQL的group by选项.我知道也许可以提供帮助,但我无法弄清楚如何做多片. 关于如何将我的代码从冰冷的速度变慢到更快的东西的任何提示?我现在对蜗牛感到高兴. 解决方法
试试大道:
transform(data,first_time = ave(time,person_id,FUN = min),first_time_project = ave(time,project_id,drop = TRUE,FUN = min) ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |