R-在唯一行上强制转换数据帧-重塑2

R-在唯一行上强制转换数据帧-重塑2,r,R,我有一个按选区和党派显示选举结果的数据框。我需要找到每个选区的得票最多的政党 我的df看起来像这样 # gss party votes 1 W07000049 Labour 22662 2 W07000049 Conservative 5901 3 W07000049 LibDem 941 3 W07000058 Labour 595

我有一个按选区和党派显示选举结果的数据框。我需要找到每个选区的得票最多的政党

我的df看起来像这样

#    gss        party         votes     
1    W07000049  Labour        22662     
2    W07000049  Conservative  5901     
3    W07000049  LibDem        941           
3    W07000058  Labour        5951
3    W07000058  LibDem        1741
3    W07000058  Conservative  852
#    gss        Labour   Conservative  LibDem
1    W07000049  22662    5901          941
2    W07000058  5951     1741          941
我想将其转换为唯一的政党名称,使其成为我的列名,如下所示

#    gss        party         votes     
1    W07000049  Labour        22662     
2    W07000049  Conservative  5901     
3    W07000049  LibDem        941           
3    W07000058  Labour        5951
3    W07000058  LibDem        1741
3    W07000058  Conservative  852
#    gss        Labour   Conservative  LibDem
1    W07000049  22662    5901          941
2    W07000058  5951     1741          941
在这个数据帧上,我可以像这样使用which.max

 x$win <- colnames(df)[apply(df, 1, function(x) which.max(x)[1])]
我已尝试使用Reforme2中的dcast,但无法应用它。我怎样才能找到每个选区的获胜党

另外,我是一名初学者,请让我知道我是否能更好地解释这一点

这里有一个重塑2::dcast解决方案:

dcast(df, df[, 2] ~ df[, 3])

# Output
# 1 W07000049         5901  22662    941
# 2 W07000058          852   5951   1741
这是假设df的结构如下

另一种方法是:dcast解决方案

library(reshape2)

molten <- melt(df)
dcast(molten, gss ~ party, id.vars = "gss", value.var = "value")
#        gss Conservative Labour LibDem
#1 W07000049         5901  22662    941
#2 W07000058          852   5951   1741

很好用,非常感谢!在基本R中,可以使用整形:整形f,方向=宽,idvar=gss,timevar=party,或者与xtabs:xtabsvows~gss+party,df一起使用。