怀疑R中的ddply函数

nhe*_*121 0 r plyr

我正在尝试通过名为的函数进行等效的group by摘要.我有一个数据框,有三列(比方说,和).然后,我想计算每个出现在数据框中的时间(带)并获取每个对应于列的最后一个元素.Rplyrddplyidperiodeventidcount(*)... group by idSQLidevent

这是我拥有的和我想要获得的内容的一个例子:

  id period event #original data frame
  1      1     1
  2      1     0
  2      2     1
  3      1     1
  4      1     1
  4      1     0

  id  t  x #what I want to obtain
  1   1  1
  2   2  1
  3   1  1
  4   2  0
Run Code Online (Sandbox Code Playgroud)

这是我用过的简单代码:

 teachers.pp<-read.table("http://www.ats.ucla.edu/stat/examples/alda/teachers_pp.csv", sep=",", header=T) # whole data frame
 datos=ddply(teachers.pp,.(id),function(x) c(t=length(x$id), x=x[length(x$id),3])) #This is working fine.
Run Code Online (Sandbox Code Playgroud)

现在,我一直在阅读用于数据分析的Split-Apply-Combine策略,并给出了一个示例,他们使用了与我下面的语法相同的语法:

  datos2=ddply(teachers.pp,.(id), summarise, t=length(id), x=teachers.pp[length(id),3]) #using summarise but the result is not what I want. 
Run Code Online (Sandbox Code Playgroud)

这是我使用的数据框架 datos2

  id  t  x
  1   1  1
  2   2  0
  3   1  1
  4   1  1
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:为什么这个结果与我使用第一段代码的结果不同,我的意思是datos1?我究竟做错了什么?

当我不得不使用summarise或时,我不清楚transform.你能告诉我这个ddply函数的正确语法吗?

jor*_*ran 5

使用时summarise,请停止引用原始数据框.相反,只需根据列名称编写表达式.

你试过这个:

ddply(teachers.pp,.(id), summarise, t=length(id), x=teachers.pp[length(id),3])
Run Code Online (Sandbox Code Playgroud)

当你可能想要的东西更像是这样的东西:

ddply(teachers.pp,.(id), summarise, t=length(id), x=tail(event,1))
Run Code Online (Sandbox Code Playgroud)