2017-06-16 23 views
0

私にはおしゃべりがあります。"|"に基づいて列を複数の列に分割するにはどうすればよいですか?

library(tidyverse) 
df <- tibble(
    id = 1:4, 
    genres = c("Action|Adventure|Science Fiction|Thriller", 
     "Adventure|Science Fiction|Thriller", 
     "Action|Crime|Thriller", 
     "Family|Animation|Adventure|Comedy|Action") 
) 
df 

enter image description here

私はによってジャンルを分けたいです "|" NAで満たされた空の列。

これは私がやったことです:

df %>% 
    separate(genres, into = c("genre1", "genre2", "genre3", "genre4", "genre5"), sep = "|") 

はしかし、それはそれぞれの文字の後に分離されています。

enter image description here

+0

'splitstackshape'パッケージの' cSplit'、 'cSplit(df、" genres "、" | ")'を使用してください。 –

+0

分割を行うコードを含めてください。 – neilfws

答えて

2

私はあなたがintoを含めていないと思う:

df <- tibble::tibble(
    id = 1:4, 
    genres = c("Action|Adventure|Science Fiction|Thriller", 
      "Adventure|Science Fiction|Thriller", 
      "Action|Crime|Thriller", 
      "Family|Animation|Adventure|Comedy|Action") 
) 
df %>% tidyr::separate(genres, into = c("genre1", "genre2", "genre3", 
       "genre4", "genre5")) 

結果:

# A tibble: 4 x 6 
    id genre1 genre2 genre3 genre4 genre5 
* <int>  <chr>  <chr>  <chr> <chr> <chr> 
1  1 Action Adventure Science Fiction Thriller 
2  2 Adventure Science Fiction Thriller  <NA> 
3  3 Action  Crime Thriller  <NA>  <NA> 
4  4 Family Animation Adventure Comedy Action 

編集:またはRichScrivenはdf %>% tidyr::separate(genres, into = paste0("genre", 1:5))、コメントで書いたように。正確|に分離するため、sep = "\\|"を使用しています。

+2

や '= paste0に( "ジャンル"、1:5)' –

+0

@RichScrivenさら​​に良いです! – RobertMc

+0

@ RobertMc-私の不完全なコードのため、私は編集しました。あなたが提供したコードは、科学とフィクションを別々の列に分割します。これは私が望むものではありません。私はサイエンスフィクションが同じ列にあり、分離は "|"のみに基づいています。 –

0

まあ、これは適切に正規表現を書いて、助けたものです。

df %>% 
    separate(genres, into = paste0("genre", 1:5), sep = "\\|") 
関連する問題