假设这个数据集:
df = data.frame(city=c(A,A,A,B,B,C,C,C,C), party=c(D,R,I,D,R,D,R,I,U), votes=c(10,2,9,7,2,1,7,3,8))
我想计算每个城市最多和第二多的投票方之间的投票差异。但每个城市都有两个以上的政党。我想要的结果是:
city vote.diff
A 1
B 5
C 1
任何帮助?
答案 0 :(得分:3)
用于测试的数据框。模仿上面的伪代码:
df = data.frame(city=c('A','A','A','B','B','C','C','C','C'),
party=c('D','R','I','D','R','D','R','I','U'),
votes=c(10,2,9,7,2,1,7,3,8))
代码:
resV <- lapply(split(df, df$city), function(df.x){
res <- xtabs(votes~party, data=df.x);
-diff( res[ order(res,decreasing=TRUE) ][1:2]) } )
data.frame(city=names(resV),
vote.diff=unlist(resV),
winner=names(unlist(resV)) )
city vote.diff winner
A.I A 1 A.I
B.R B 5 B.R
C.R C 1 C.R
如果你想省略胜利者专栏,那应该是一个微不足道的修复。