在R中按组计算第一个差异 [英] Calculate first difference by group in R

查看:18
本文介绍了在R中按组计算第一个差异的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道是否有人可以帮助我按组计算分数的一阶差异.我知道这应该是一个简单的过程,但由于某种原因我在做这件事时遇到了麻烦.....哎呀

I was wondering if someone could help me calculate the first difference of a score by group. I know it should be a simple process but for some reason I'm having trouble doing it..... yikes

这是一个示例数据框:

score <- c(10,30,14,20,6)

group <- c(rep(1001,2),rep(1005,3))

df <- data.frame(score,group)

> df 
  score group
1    10  1001
2    30  1001
3    14  1005
4    20  1005
5     6  1005

这是我正在寻找的输出.

And here's the output I was looking for.

1   NA
2   20
3   NA  
4    6
5  -14

提前致谢.

推荐答案

这是使用base R的一种方式

This is one way using base R

df$diff <- unlist(by(df$score , list(df$group) , function(i) c(NA,diff(i))))

df$diff <- ave(df$score , df$group , FUN=function(i) c(NA,diff(i)))


或使用 data.table - 这对于较大的 data.frames 会更有效


or using data.table - this will be more efficient for larger data.frames

library(data.table)
dt <- data.table(df)
setkey(dt,group)
dt[,diff:=c(NA,diff(score)),by=group]

这篇关于在R中按组计算第一个差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆