Я пытаюсь сделать эквивалентную group by
сводку в R
через функцию plyr
с именем ddply
. У меня есть фрейм данных с тремя столбцами (скажем, id
, period
и event
). Затем я хотел бы подсчитать, сколько раз каждый id
появляется во фрейме данных (count(*)... group by id
с SQL
) и получить последний элемент каждого id
, соответствующий столбцу event
.
Вот пример того, что у меня есть и что я пытаюсь получить:
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.
Я прочитал Стратегию разделения-применения-объединения для анализа данных и понял приведен пример, в котором они использовали синтаксис, эквивалентный тому, который я привел ниже:
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
? Что я делаю неправильно?
Мне непонятно, когда я должен использовать summarise
или transform
. Не могли бы вы сказать мне правильный синтаксис для функции ddply
?