比较R中数据框中的不同列

时间:2017-08-17 13:31:13

标签: r excel dataframe statistics dplyr

我有一个如下所示的数据框:

    State           Rank1     Rank2    Rank3    Rank4
         1          37.20%    32.88%   20.92%   7.02%
         2          44.01%    30.15%   22.68%   1.54%
         3          49.72%    48.86%   47.61%   46.50%
         4          60.40%    30.35%   26.34%   49.78%

该数据集包含特定地理位置的去年选举数据。列A包含州代码,列B:D包含有关特定州前四大党的投票份额的信息。

我的任务是根据某些标准将它们分为4类:

单极 - 获胜者在获得多数票方面没有遇到任何困难。在这种情况下,大多数情况下,获胜者越过中途,即超过50%的投票份额(VS用于数据集。

双极 - 选民在决定谁应该占多数时表现出明显的犹豫不决。亚军获得了大量选票,亚军和第三名选手之间的差距相当大。

多极 - 通常情况下,多名选手获得了大量选票,即使投票中的轻微波动也会产生不同的结果。

分裂 - 单极 - 获胜者获得了明确的授权,但选民在决定下一次投票的人时表现出犹豫不决。超过1个竞争者获得了几乎相似的选票。

我如何在 R 中执行此操作,因为投票份额之间会有非常接近的比较。提前谢谢。

干杯!

1 个答案:

答案 0 :(得分:0)

使用data.frame进行投票:

votes = data.frame(State = c(1:4),  Rank1 =  c(37.20, 44.01, 49.72, 60.40), 
Rank2 = c(32.88, 30.15, 48.86, 30.35), 
Rank3 = c(20.92, 22.68, 47.61, 26.34), 
Rank4 = c(7.02, 1.54, 46.50, 49.78))

然后使用库dplyr来使用函数case_when

例如

library(dplyr)
votes$type = case_when(
 votes$Rank1 > unipolar_limit | votes$Rank1 - votes$Rank2 > unipolar_limit2 ~ "Unipolar"
 , votes$Rank2 - votes$Rank3 > bipolar_limit ~ "Bipolar"
 , votes$Rank1 - votes$Rank3 < multi_limit  ~ "Multi-polar"
 , votes$Rank1 > 50 & votes$Rank2 - votes$Rank4 < divided_limit ~ "Divided-Unipolar" 
)

具有你喜欢的限制或条件的东西。