0

我正在group by尝试R通过plyr名为ddply. 我有一个数据框,它有三列(比如和id)。然后,我想计算每个出现在数据框中的次数(with )并获取每个对应于 column的最后一个元素。periodeventidcount(*)... 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

这是我一直在使用的简单代码:

 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.

现在,我一直在阅读The Split-Apply-Combine Strategy for Data Analysis并给出了一个示例,其中他们使用了与我在下面放置的语法等效的语法:

  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. 

这是我使用的数据框datos2

  id  t  x
  1   1  1
  2   2  0
  3   1  1
  4   1  1

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

我不清楚什么时候必须使用summariseor transform。你能告诉我这个ddply函数的正确语法吗?

4

1 回答 1

5

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

你试过这个:

ddply(teachers.pp,.(id), summarise, t=length(id), x=teachers.pp[length(id),3])

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

ddply(teachers.pp,.(id), summarise, t=length(id), x=tail(event,1))
于 2012-07-25T21:32:19.440 回答