与dplyr小组第一名的差异

奥姆里374

我正在尝试使用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值,其中迭代次数Num = 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崩溃并返回此错误消息:

抛出“ Rcpp :: exception”的what()实例后调用纯的虚拟方法terminate:不兼容的大小(%d),期望的是%d(组大小)或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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

:: Android Framework ::谁是第一名,合子或达尔维克?

来自分类Dev

SQL:获取用户的第一名分数

来自分类Dev

在Excel 2010中将姓氏第一名和中间名首字母分隔为一个单元格

来自分类Dev

使用dplyr重命名具有唯一名称的多列的快速方法

来自分类Dev

唯一名称的子集

来自分类Dev

与小组成员的小组内差异

来自分类Dev

作为一名Web开发人员,我第一步应该采取哪些措施来保护网站安全?

来自分类Dev

列出第二列的所有公共值,然后在mysql中的第一个值中列出唯一名称

来自分类Dev

具有唯一名称标题的表

来自分类Dev

宏中循环变量的唯一名称

来自分类Dev

需要唯一名称的Javascript函数调用

来自分类Dev

Haskell:翻转一名咖喱美元经营者

来自分类Dev

创建具有唯一名称的元素

来自分类Dev

上载具有唯一名称的图像

来自分类Dev

给定的唯一名称列表和种子

来自分类Dev

Capistrano Resque和一名工人进行生产

来自分类Dev

如何从列表创建唯一名称列表

来自分类Dev

上载具有唯一名称的图像

来自分类Dev

仅一名用户的Facebook应用程序

来自分类Dev

用sysdate开发唯一名称列表

来自分类Dev

下拉列表中的唯一名称

来自分类Dev

index_max不是RcppArmadillo的一名军人

来自分类Dev

员工部门的唯一名称

来自分类Dev

查找唯一名称的频率

来自分类Dev

无需额外查询即可选择一名父母和一名孩子

来自分类Dev

差异在第一个差异后停止

来自分类Dev

T-SQL - 选择前 10 名;每组一名

来自分类Dev

如何以每个班级只有一名老师和一名助教的方式设计数据库?

来自分类Dev

查询以输出客户和员工及其城市,其中每个城市必须至少包含一名客户和一名员工

Related 相关文章

热门标签

归档