所以我在咨询后正在研究人们的财务结果。数据框"咨询"看起来像这样,请注意每个会话记录一个人会有多个不同分数的会话:
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区分每个名字的最后一个和第一个条目。不知道如何处理这个问题。非常感谢帮助人!
答案 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
}