根据R中的日期计算差异

时间:2016-02-22 22:01:30

标签: r

所以我在咨询后正在研究人们的财务结果。数据框"咨询"看起来像这样,请注意每个会话记录一个人会有多个不同分数的会话:

           Name      Date        credit score
            A       1/7/2016        600
            A       1/28/2016       620  
            C       2/2/2016        700 
            C       3/2/2016        660
            C       4/4/2016        750 

我想编写一个函数,它将数据框分为两个级别(已经这样做),然后获取名称的最后一个条目,并找出信用评分的差异。我希望建立客户从参与此咨询服务时获得的信用评分的变化,从他们进入他们离开的时间开始,因为我想将这些信息输出到矢量并计算平均值。我不太确定如何告诉R区分每个名字的最后一个和第一个条目。不知道如何处理这个问题。非常感谢帮助人!

4 个答案:

答案 0 :(得分:2)

使用Name将函数应用于每个with(dat, tapply(creditscore, Name, FUN=function(x) tail(x,1) - head(x,1)) ) # A C #20 50 组(假设您已经先对数据进行了排序,而您说的是这样):

0

答案 1 :(得分:1)

我们也可以使用library(data.table) dat$Date <- as.Date(dat$Date,format="%m/%d/%Y") setDT(dat) res <- dat[,creditscore[which(Date==max(Date))]-creditscore[which(Date==min(Date))], by = Name] > res Name V1 1: A 20 2: C 50 执行此操作(如果数据很大且无需排序,则非常有用):

res <- dat[order(creditscore),creditscore[.N]-creditscore[1], by = Name]

基于对@Frank效率的一些讨论,这里有一个更“数据。表”的方式,它对数据进行一次排序,然后使用索引来计算我们的结果:

convolution

答案 2 :(得分:1)

// headerCtrl = ??? sideMenuCtrl.selectMenuItem = function(menuItem) { headerCtrl.text = menuItem.text; } 解决方案(为了安全起见,使用排列行进行排序):

dplyr

答案 3 :(得分:0)

如果您的数据框名为df -

CreditSc<-data.frame()
j<-1
for (i in unique(df$Name))
{
subs<-subset(df, Name == i)
CreditSc[j,]<-tail(subs$CreditScore, n = 1) - head(subs$CreditScore, n = 1)
j<-j+1
}
相关问题