2013-03-21 61 views
1

我有一個數據集如下:多個plyr函數和操作在一個語句中?

i,o,c 
A,4,USA 
B,3,CAN 
A,5,USA 
C,4,MEX 
C,1,USA 
A,3,CAN 

我想這個數據集改造成一個形式如下:

i,u,o,c 
A,3,4,2 
B,1,3,1 
C,2,2.5,1 

這裏,u表示變量i在數據集中的唯一實例,鄰=(o/u之和)和c =獨特的國家。

我可以用下面的語句,通過使用plyr得到U:

count(df1,vars="i") 

我還可以通過使用從我previous問題學到的見解得到一些其他變量。我可以費力地並通過保存到多個數據框,然後最終將它們結合在一起,實現我的預期結果,我想知道是否存在單行優化或者只是比我目前冗長的方式更好的方法。

謝謝!

回答

4

我不明白這與以前的問題有何不同。該方法是一樣的:

library(plyr) 
ddply(mydf, .(i), summarise, 
     u = length(i), 
     o = mean(o), 
     c = length(unique(c))) 
# i u o c 
# 1 A 3 4.0 2 
# 2 B 1 3.0 1 
# 3 C 2 2.5 2 

如果你喜歡一個data.table解決方案:

> library(data.table) 
> DT <- data.table(mydf) 
> DT[, list(u = .N, o = mean(o), c = length(unique(c))), by = "i"] 
    i u o c 
1: A 3 4.0 2 
2: B 1 3.0 1 
3: C 2 2.5 2 
+0

謝謝!使用data.table的優秀替代解決方案。 – Shion 2013-03-21 18:30:30

相關問題