gpt4 book ai didi

r - 在多个不同的切片上应用聚合函数

转载 作者:行者123 更新时间:2023-12-04 22:24:52 25 4
gpt4 key购买 nike

我有一个数据数组,其中包含有关人员和项目的一些信息,例如:

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 选项。我知道 by 可能会有所帮助,但我不知道如何做多个切片。

关于如何将我的代码从冰川缓慢变为更快一些的任何提示?我会很高兴现在有一只蜗牛。

最佳答案

尝试 ave :

transform(data, 
first_time = ave(time, person_id, FUN = min),
first_time_project = ave(time, person_id, project_id, drop = TRUE, FUN = min)
)

关于r - 在多个不同的切片上应用聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4998846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com