gpt4 book ai didi

r - 与dplyr小组第一名的差异

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

我正在尝试使用dplyr创建一个窗口函数,该函数将返回一个新矢量,该矢量的每个值与其组中的第一个值之间存在差异。
例如,给定此数据集:

dummy <- data.frame(userId=rep(1,6),
libId=rep(999,6),
curatorId=c(1:2,1:2,1:2),
iterationNum=c(0,0,1,1,2,2),
rf=c(5,10,0,15,30,40)
)

这将创建此数据集:
  userId libId curatorId iterationNum rf
1 1 999 1 0 5
2 1 999 2 0 10
3 1 999 1 1 0
4 1 999 2 1 15
5 1 999 1 2 30
6 1 999 2 2 40

并给出以下分组:
 dummy<-group_by(dummy,libId,userId,curatorId)

将给出以下结果:
  userId libId curatorId iterationNum   rf   rf.diff
1 1 999 1 0 5 0
2 1 999 2 0 10 0
3 1 999 1 1 0 -5
4 1 999 2 1 15 -5
5 1 999 1 2 30 25
6 1 999 2 2 40 30

因此,对于每组用户,库和策展人,我将得到rf值,减去rF值,其中erationNum = 0。
我尝试使用 first函数, rank函数和其他函数,但是找不到钉牢它的方法。

- -编辑 - -

这是我尝试的:
dummy %>% 
group_by(userId,libId,curatorId) %>%
mutate(rf.diff = rf - subset(dummy,iterationNum==0)[['rf']])

和:
dummy %>% 
group_by(userId,libId,curatorId) %>%
mutate(rf.diff = rf - first(x = rf,order_by=iterationNum))

哪个使R崩溃并返回此错误消息:

pure virtual method called terminate called after throwing an instance of 'Rcpp::exception' what(): incompatible size (%d), expecting %d (the group size) or 1`

最佳答案

我上面评论的两种方法如下。

dummy %>%
group_by(libId, userId, curatorId) %>%
mutate(rf.diff = rf - rf[iterationNum == 0])
#Source: local data frame [6 x 6]
#Groups: libId, userId, curatorId
#
# userId libId curatorId iterationNum rf rf.diff
#1 1 999 1 0 5 0
#2 1 999 2 0 10 0
#3 1 999 1 1 0 -5
#4 1 999 2 1 15 5
#5 1 999 1 2 30 25
#6 1 999 2 2 40 30

或者使用 arrange通过迭代次数对数据进行排序:
dummy %>%
arrange(iterationNum) %>%
group_by(libId, userId, curatorId) %>%
mutate(rf.diff = rf - first(rf))
#Source: local data frame [6 x 6]
#Groups: libId, userId, curatorId
#
# userId libId curatorId iterationNum rf rf.diff
#1 1 999 1 0 5 0
#2 1 999 2 0 10 0
#3 1 999 1 1 0 -5
#4 1 999 2 1 15 5
#5 1 999 1 2 30 25
#6 1 999 2 2 40 30

如您所见,这两个示例数据都产生相同的输出。

关于r - 与dplyr小组第一名的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28015072/

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