2017-08-17 38 views
-3

我有一個數據幀,看起來像這樣:比較不同的列在數據幀中的R

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名參與方投票份額的信息。

我的任務是基於一定的規定 - 把它們分爲4類:

單極 - 獲獎者面對任何困難在得到多數。在大多數情況下是這樣,獲獎者穿越中途大關,即表決的份額超過50%(VS是在數據集中使用

雙極型 - 的選民在決定出意義優柔寡斷誰應該得到廣大亞軍已經得到了實質性的票,還有就是亞軍和第三的選手之間有相當大的距離

多極 - 。通常多個參賽者都得到了實質性的選票,甚至小幅度擺動在這些選票會導致不同的結果。

Divided-Unipolar - 獲勝者獲得明確的授權,但選民在決定下一次投票的人選時表現出優柔寡斷。超過1名競爭者獲得了幾乎相似的選票。

如何在R中做到這一點,因爲在所有的選票之間會有非常密切的比較。提前致謝。

乾杯!

+0

你想用於最後三個類別的截斷值是多少?我不能在不知道你的意思是什麼意思的時候回答你的問題,比如「猶豫不決」。 –

+0

你有什麼試過的?這聽起來像是你複製並粘貼到問題中的任務,只需很少的努力就可以解決問題。 – manotheshark

回答

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" 
) 

類似的東西與你喜歡的限制或條件。

相關問題