1

我有一个数据集如下:

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 = (o / u 的总和),c = 唯一国家。

我可以通过以下语句和使用 plyr 得到你:

count(df1,vars="i")

我还可以通过使用从我之前的问题中学到的见解来获得一些其他变量。我可以费力地保存到多个数据帧,然后最终将它们连接在一起以实现我的预期结果,我想知道是否有一条线优化,或者只是比我目前的冗长方式更好的方法。

谢谢 !

4

1 回答 1

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
于 2013-03-21T18:20:17.663 回答