区切り文字を使用して、データフレーム内の列を複数の列(異なる長さ)に分割します

user9737581

私はこのテーブルを持っています:

cca2    ccn3    cca3    borders
AX      248     ALA 
AL      8       ALB     MNE,GRC,MKD,UNK
AD      20      AND     FRA,ESP
AT      40      AUT     CZE,DEU,HUN,ITA,LIE,SVK,SVN,CHE
BE      56      BEL     FRA,DEU,LUX,NLD

境界線を複数の列に分けたいと考えています。ご覧のとおり、境界線には同じ量のデータがありません。

私は試した:

newCountries <- data.frame(do.call('rbind', strsplit(as.character(countries$borders),',',fixed=TRUE)))

しかし、うまくいきませんでした...どうすればこのplsを解決できますか?

結果は次のようになります。

cca2    ccn3    cca3    b1   b2   b3  b4  b5  b6  b7  b8
AX      248     ALA     NA   NA   NA  NA  NA  NA  NA  NA
AL      8       ALB     MNE  GRC  MKD UNK NA  NA  NA  NA
AD      20      AND     FRA  ESP  NA  NA  NA  NA  NA  NA
AT      40      AUT     CZE  DEU  HUN ITA LIE SVK SVN CHE
BE      56      BEL     FRA  DEU  LUX NLD NA  NA  NA  NA
カミーユ

これが2つの方法です。

1つ目は主にベースRですがseparatetidyr(と一緒に出荷tidyverseから借用ます。このために、私sapplyは文字列をの各値に分割し、bordersそれらの最大長を取りました。この場合、それは8つの境界線です。次に、これを使用しての列名を決定しましたseparateseparate便利な関数だと思いますが、必要な列数が正確にわからない場合は注意が必要な場合があります。

2番目の方法は、dplyrベースです。ここでは、文字列をに分割し、長いデータフレームbordersunnest編集し、の値ごとに存在するエントリの数に基づいて列番号を作成し、それをワイドフォーマットに戻すためにcca2使用spreadしました。

library(tidyverse)


max_borders <- max(sapply(df$borders, function(x) length(strsplit(x, ",")[[1]]), simplify = T))
tidyr::separate(df, borders, into = paste0("b", 1:max_borders), sep = ",")
#> Warning: Expected 8 pieces. Missing pieces filled with `NA` in 3 rows [2,
#> 3, 5].
#> # A tibble: 5 x 11
#>   cca2   ccn3 cca3  b1    b2    b3    b4    b5    b6    b7    b8   
#>   <chr> <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 AX      248 ALA   <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
#> 2 AL        8 ALB   MNE   GRC   MKD   UNK   <NA>  <NA>  <NA>  <NA> 
#> 3 AD       20 AND   FRA   ESP   <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
#> 4 AT       40 AUT   CZE   DEU   HUN   ITA   LIE   SVK   SVN   CHE  
#> 5 BE       56 BEL   FRA   DEU   LUX   NLD   <NA>  <NA>  <NA>  <NA>


df %>%
    mutate(border_list = str_split(borders, ",")) %>%
    unnest(border_list) %>%
    select(-borders) %>%
    group_by(cca2) %>%
    mutate(col = paste0("b", row_number())) %>%
    spread(key = col, value = border_list)
#> # A tibble: 5 x 11
#> # Groups:   cca2 [5]
#>   cca2   ccn3 cca3  b1    b2    b3    b4    b5    b6    b7    b8   
#>   <chr> <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#> 1 AD       20 AND   FRA   ESP   <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
#> 2 AL        8 ALB   MNE   GRC   MKD   UNK   <NA>  <NA>  <NA>  <NA> 
#> 3 AT       40 AUT   CZE   DEU   HUN   ITA   LIE   SVK   SVN   CHE  
#> 4 AX      248 ALA   <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
#> 5 BE       56 BEL   FRA   DEU   LUX   NLD   <NA>  <NA>  <NA>  <NA>

reprexパッケージ(v0.2.0)によって2018-05-08に作成されました

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Daskデータフレーム-区切り文字に基づいて列を複数の行に分割します

分類Dev

異なる長さの文字列を分割し、一致に基づいてデータフレームの特定の列に貼り付けます

分類Dev

区切り文字として2番目の列を使用してデータフレーム列を分割する

分類Dev

Pandasデータフレーム内の異なる長さのプレフィックスと一貫性のない区切り文字を持つ列値からの共通のプレフィックスによってデータをグループ化して合計します

分類Dev

R-データフレーム内のさまざまな文字列長の列を1文字の複数の列に分割する

分類Dev

分割する文字列の数が明確でない場合は、区切り文字でデータフレーム列を分割します

分類Dev

区切り文字の複数の列をパンダデータフレームの行に分割する

分類Dev

Pandasデータフレームの区切り文字で列を不明な数の列に分割する

分類Dev

異なる区切り文字を使用して SQL で 1 つの列の値を複数の列に分割する

分類Dev

データフレーム内の特定の行の各列で区切り文字を使用して各値を分割する方法

分類Dev

データフレーム文字列列を複数の列に分割します

分類Dev

データフレーム文字列列を複数の列に分割します

分類Dev

データフレーム文字列列を複数の列に分割します

分類Dev

文字列を「.」で区切る方法 dplyr を使用したデータ フレームの区切り文字として

分類Dev

パンダデータフレームの複数の列を区切り文字で分割する

分類Dev

データフレーム文字列列をパターンなしで複数の列に分割する

分類Dev

txtファイルをデータフレームに解析し、複数の区切り文字に基づいて列を埋めます

分類Dev

キーとして複数の区切り文字を使用して文字列を辞書に分割する方法

分類Dev

1つのデータフレーム内の複数の.csvおよびcbindから同じ列(異なる長さ)を抽出します-R

分類Dev

区切られた文字列をRデータフレームの個別の列に分割します

分類Dev

Python:データフレーム内で動的な列の命名を使用して列を複数の列に分割する方法

分類Dev

データフレーム列の各要素でgrplを使用して、異なるデータフレーム内の文字列を検索します

分類Dev

データフレーム内の区切られた値をR内の多次元配列に分割します

分類Dev

R:forループを使用して、長さが異なる2つのデータフレームにわたって複数のif条件を実行します

分類Dev

データフレームで複数の文字列を検索し、文字列の列と行に応じて異なる列の内容をプルする方法

分類Dev

複数の区切り文字を使用してCrystalReportのテキストフィールドを分割し、異なるフィールドにロードする

分類Dev

複数の区切り文字に基づいてパンダデータフレームの列のテキストを分割し、それぞれに新しい行を作成したいと思います

分類Dev

データフレーム内の文字列(区切り文字で区切られている)の数を見つけていますか?

分類Dev

区切り文字を使用してchr文字列をデータフレームに解析します

Related 関連記事

  1. 1

    Daskデータフレーム-区切り文字に基づいて列を複数の行に分割します

  2. 2

    異なる長さの文字列を分割し、一致に基づいてデータフレームの特定の列に貼り付けます

  3. 3

    区切り文字として2番目の列を使用してデータフレーム列を分割する

  4. 4

    Pandasデータフレーム内の異なる長さのプレフィックスと一貫性のない区切り文字を持つ列値からの共通のプレフィックスによってデータをグループ化して合計します

  5. 5

    R-データフレーム内のさまざまな文字列長の列を1文字の複数の列に分割する

  6. 6

    分割する文字列の数が明確でない場合は、区切り文字でデータフレーム列を分割します

  7. 7

    区切り文字の複数の列をパンダデータフレームの行に分割する

  8. 8

    Pandasデータフレームの区切り文字で列を不明な数の列に分割する

  9. 9

    異なる区切り文字を使用して SQL で 1 つの列の値を複数の列に分割する

  10. 10

    データフレーム内の特定の行の各列で区切り文字を使用して各値を分割する方法

  11. 11

    データフレーム文字列列を複数の列に分割します

  12. 12

    データフレーム文字列列を複数の列に分割します

  13. 13

    データフレーム文字列列を複数の列に分割します

  14. 14

    文字列を「.」で区切る方法 dplyr を使用したデータ フレームの区切り文字として

  15. 15

    パンダデータフレームの複数の列を区切り文字で分割する

  16. 16

    データフレーム文字列列をパターンなしで複数の列に分割する

  17. 17

    txtファイルをデータフレームに解析し、複数の区切り文字に基づいて列を埋めます

  18. 18

    キーとして複数の区切り文字を使用して文字列を辞書に分割する方法

  19. 19

    1つのデータフレーム内の複数の.csvおよびcbindから同じ列(異なる長さ)を抽出します-R

  20. 20

    区切られた文字列をRデータフレームの個別の列に分割します

  21. 21

    Python:データフレーム内で動的な列の命名を使用して列を複数の列に分割する方法

  22. 22

    データフレーム列の各要素でgrplを使用して、異なるデータフレーム内の文字列を検索します

  23. 23

    データフレーム内の区切られた値をR内の多次元配列に分割します

  24. 24

    R:forループを使用して、長さが異なる2つのデータフレームにわたって複数のif条件を実行します

  25. 25

    データフレームで複数の文字列を検索し、文字列の列と行に応じて異なる列の内容をプルする方法

  26. 26

    複数の区切り文字を使用してCrystalReportのテキストフィールドを分割し、異なるフィールドにロードする

  27. 27

    複数の区切り文字に基づいてパンダデータフレームの列のテキストを分割し、それぞれに新しい行を作成したいと思います

  28. 28

    データフレーム内の文字列(区切り文字で区切られている)の数を見つけていますか?

  29. 29

    区切り文字を使用してchr文字列をデータフレームに解析します

ホットタグ

アーカイブ