2017-06-09 8 views
1
         Province     ElecDistName        Candidate Votes Majority Vper MajPer 
              <chr>       <chr>         <chr> <int> <int> <dbl> <dbl> 
1 Newfoundland and Labrador/Terre-Neuve-et-Labrador St. John's East/St. John's-Est      Nick Whalen Liberal 20974  646 46.7 1.4 
2 Newfoundland and Labrador/Terre-Neuve-et-Labrador St. John's East/St. John's-Est Jack Harris ** NDP-New Democratic Party 20328  NA 45.3  NA 
3 Newfoundland and Labrador/Terre-Neuve-et-Labrador St. John's East/St. John's-Est   Deanne Stapleton Conservative 2938  NA 6.5  NA 
4 Newfoundland and Labrador/Terre-Neuve-et-Labrador St. John's East/St. John's-Est  David Anthony Peters Green Party 500  NA 1.1  NA 
5 Newfoundland and Labrador/Terre-Neuve-et-Labrador St. John's East/St. John's-Est     Sean Burton Communist 140  NA 0.3  NA 
6     New Brunswick/Nouveau-Brunswick     Fundy Royal     Alaina Lockhart Liberal 19136  1775 40.9 3.8 

Top of Dataset分割ここ

素人質問をパターンマッチングによる文字列は、私は他の党を含む、名前を含む二つの1つに候補列を分割しようとしています。私はここに掲載された別の機能のいくつかを試しました:

しかし、これは多くの観測を欠場するようです。 3つの名前を持つ候補者の場合、問題は明らかですが、完全に欠けているようなものもあります(1つのアスタリスクは不可能なアスタリスクを持つ候補者です)。

Liberal、Conservative、NDP、Greenなどの最も一般的なパーティー名を識別するgreplと機能を組み合わせて、Party nameという名前のPartyという新しい列を作成することを考えました。試してみるたびにエラーメッセージが継続的に表示されます。

誰かがこの列をどのように分割できるか考えている人は、大きな助けになるでしょう。

ありがとうございました!ここで

はdputを使用してコードである:ここでは

structure(list(Province = c("Newfoundland and Labrador/Terre-Neuve-et-Labrador", 
"Newfoundland and Labrador/Terre-Neuve-et-Labrador", "Newfoundland and Labrador/Terre-Neuve-et-Labrador", 
"Newfoundland and Labrador/Terre-Neuve-et-Labrador", "Newfoundland and Labrador/Terre-Neuve-et-Labrador", 
"New Brunswick/Nouveau-Brunswick"), ElecDistName = c("St. John's East/St. John's-Est", 
"St. John's East/St. John's-Est", "St. John's East/St. John's-Est", 
"St. John's East/St. John's-Est", "St. John's East/St. John's-Est", 
"Fundy Royal"), Candidate = c("Nick Whalen Liberal", "Jack Harris ** NDP-New Democratic Party", 
"Deanne Stapleton Conservative", "David Anthony Peters Green Party", 
"Sean Burton Communist", "Alaina Lockhart Liberal"), Votes = c(20974L, 
20328L, 2938L, 500L, 140L, 19136L), Majority = c(646L, NA, NA, 
NA, NA, 1775L), Vper = c(46.7, 45.3, 6.5, 1.1, 0.3, 40.9), MajPer = c(1.4, 
NA, NA, NA, NA, 3.8)), .Names = c("Province", "ElecDistName", 
"Candidate", "Votes", "Majority", "Vper", "MajPer"), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame")) 
+0

データオブジェクトがどのように見えるか分かりません。 – ssp3nc3r

+0

申し訳ありませんが、今コードを投稿しました – lazslo93

+0

あなたはいくつのパーティを持っていますか? – Val

答えて

0

はここで最後の選択は、唯一の方法は、動作することを示すために追加されたことfuzzyjoinパッケージ


library(tidyverse) 
library(fuzzyjoin) 

parties <- data_frame(party = c("Liberal", "NDP-New Democratic Party", "Conservative", "Green Party", "Communist")) 

df %>% 
    regex_left_join(parties, by = c(Candidate = "party")) %>% 
    replace_na(list(party = "minor")) %>% 
    mutate(Candidate = str_replace(Candidate, party, "")) %>% 
    select(Candidate, party) 
#> # A tibble: 6 x 2 
#>    Candidate     party 
#>     <chr>     <chr> 
#> 1   Nick Whalen     Liberal 
#> 2  Jack Harris ** NDP-New Democratic Party 
#> 3  Deanne Stapleton    Conservative 
#> 4 David Anthony Peters    Green Party 
#> 5   Sean Burton     Communist 
#> 6  Alaina Lockhart     Liberal 

注意を使用して別のアプローチです。私はこのアプローチが特に好きです。データフレームに現れる可能性のある他の関係者がうまく扱うことができるからです。replace_na

+0

ありがとう、これは美しく働いた! – lazslo93

0

あなたはMODする必要がありますいくつかの基本的なコードです。各パーティー名を|で区切られた引用符の中に入れる

require(dplyr) 
require(stringr) 

df <- data.frame(Candidate = "Nick Whalen Liberal", Majority = 1) 
parties <- c("Liberal|Conservative") 
df %>% mutate(Name = str_sub(Candidate, 1, str_locate(Candidate, parties)[1] - 1)) 
+0

ありがとう!私はこれで遊びます – lazslo93

関連する問題