我有一个数据集如下:
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")
我还可以使用从previous问题中获得的见解来获取其他一些变量。我可以费力地并且通过保存到多个数据框然后最终加入它们来实现我的预期结果我想知道是否存在单线优化或仅仅是比我当前漫长的方式更好的方式。
谢谢!
答案 0 :(得分: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