パターンに基づいてデータフレームの行を新しい列に文字列分割

パオロ・ロレンジーニ

私はこのようなデータフレームを持っています

df

Country     Year  col3. col4. col5
USA2018      10    50    13   NA
UK 2018       4    12     6   NA
China       2018   15     4    1
Malta        NA    2018  25    8

2018が最初の列にマージされ、YearがNAである行のYear列にシフトされ、次の出力を持つ行の「Country」列の文字列をパターン「2018」で分割したいと思います。

df

Country     Year  col3. col4. col5
USA         2018   10    50    13   
UK          2018   4    12     6   
China       2018   15    4    1
Malta       2018   25    8     NA

なにか提案を?


編集:このデータはPDFスクレイピングの結果です。PDFへのリンク、および以下のコード:

# install.packages("pdftools") 
# install.packages("readr") 
library(pdftools) 
library(readr) 


epi <- pdf_text("malaria_epi.pdf") 
epi_df <- epi %>% 
  read_lines() %>% 
  grep('^\\s{2}\\w', ., value = TRUE) %>% 
  paste(collapse = '\n') %>% read_fwf(fwf_empty(.)) 
ゴワチン

これが解決策です。少しトリッキーでしたが、あなたのケースをカバーしていると思います。NAが列の真ん中にある場合、この解決策は問題になる可能性がありますが、私はまだより良い方法を見つけることができませんでした。

df <- read.table(header=TRUE, 
                 text="
Country     Year  col3. col4. col5
USA2018      10    50    13   NA
UK2018       4    12     6   NA
China       2018   15     4    1
Malta        NA    2018  25    8")

tmpN <- names(df) # save the colnames
df = cbind(df[,1],df) # duplicate the first column
df[,c(1,2)] <- lapply(df[,c(1,2)], as.character)

df[,1] = sub('[[:digit:]]+','',df[,1]) # remove date in first column
df[,2] = sub('[[:alpha:]]+','',df[,2]) # remove city in second column
df[df==''] <- NA # replace empty cells with NA

# push all NA to the right side
df2 = as.data.frame(t(apply(df,1, function(x) { return(c(x[!is.na(x)],x[is.na(x)]) )} )))
df2 <- df2[,!(colSums(is.na(df2))==nrow(df2))] # remove column full of NA

colnames(df2) <- tmpN # replace colnames

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

文字列列の値に基づいてパンダのデータフレームを分割します

分類Dev

条件に基づいてパンダデータフレーム列の特殊文字の文字列を分割する

分類Dev

パンダ:特定の列の文字列値に基づいて、データフレームを個別のデータフレームに分割します

分類Dev

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

分類Dev

\に基づいてデータフレーム文字列を分割します

分類Dev

別のデータフレームに基づいてパンダに新しい列を作成する

分類Dev

列の行に基づいてデータフレームを分割する方法

分類Dev

各文の最初の単語に基づいて、pandasデータフレーム列の文字列のリストを新しい列に分割します

分類Dev

文字に基づいて、パンダのデータフレームの各セルを新しい行に分割する方法は?

分類Dev

文字の値に基づいてデータフレーム文字を列に分割します

分類Dev

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

分類Dev

等しい長さに基づいてデータフレーム列をRの別々の行に分割する方法

分類Dev

新しいパンダのデータフレーム列に、行の値に基づいて他の列の名前を入力します

分類Dev

条件を含む文字列に基づいてデータフレームの新しい列を作成する方法

分類Dev

空白行の列に基づいてデータフレームに新しい列を追加する

分類Dev

パンダ:別のデータフレームの値に基づいて、データフレームに新しい列を追加します

分類Dev

列の値の違いに基づいてパンダのデータフレームを分割する方法

分類Dev

列の複数の値に基づいてデータフレームに新しい行を作成します

分類Dev

行の最初の値に基づいて、データフレームに新しい列を追加します

分類Dev

if / elif / and関数に基づいてパンダデータフレームに新しい列を作成します

分類Dev

ルールパンダデータフレームに基づいて新しい列を作成します

分類Dev

最初の列のパターン変更に基づいて、パンダデータフレームに新しい列を作成します

分類Dev

文字列に基づいてデータフレームを分割する

分類Dev

セル文字列に基づいてデータフレームを分割する

分類Dev

Rの列値の文字列に基づいて、データフレームを2つのサブデータフレームに分割します

分類Dev

行の集計数に基づいてパンダデータフレームの列を除外します

分類Dev

列の値に基づいてパンダデータフレームから行を抽出します

分類Dev

「RosettaStone」データフレームに基づいて、1つの文字列を新しい文字列にマップする新しい列を追加しますか?

分類Dev

パンダ:列のnull値に基づいてデータフレームを分割する

Related 関連記事

  1. 1

    文字列列の値に基づいてパンダのデータフレームを分割します

  2. 2

    条件に基づいてパンダデータフレーム列の特殊文字の文字列を分割する

  3. 3

    パンダ:特定の列の文字列値に基づいて、データフレームを個別のデータフレームに分割します

  4. 4

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

  5. 5

    \に基づいてデータフレーム文字列を分割します

  6. 6

    別のデータフレームに基づいてパンダに新しい列を作成する

  7. 7

    列の行に基づいてデータフレームを分割する方法

  8. 8

    各文の最初の単語に基づいて、pandasデータフレーム列の文字列のリストを新しい列に分割します

  9. 9

    文字に基づいて、パンダのデータフレームの各セルを新しい行に分割する方法は?

  10. 10

    文字の値に基づいてデータフレーム文字を列に分割します

  11. 11

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

  12. 12

    等しい長さに基づいてデータフレーム列をRの別々の行に分割する方法

  13. 13

    新しいパンダのデータフレーム列に、行の値に基づいて他の列の名前を入力します

  14. 14

    条件を含む文字列に基づいてデータフレームの新しい列を作成する方法

  15. 15

    空白行の列に基づいてデータフレームに新しい列を追加する

  16. 16

    パンダ:別のデータフレームの値に基づいて、データフレームに新しい列を追加します

  17. 17

    列の値の違いに基づいてパンダのデータフレームを分割する方法

  18. 18

    列の複数の値に基づいてデータフレームに新しい行を作成します

  19. 19

    行の最初の値に基づいて、データフレームに新しい列を追加します

  20. 20

    if / elif / and関数に基づいてパンダデータフレームに新しい列を作成します

  21. 21

    ルールパンダデータフレームに基づいて新しい列を作成します

  22. 22

    最初の列のパターン変更に基づいて、パンダデータフレームに新しい列を作成します

  23. 23

    文字列に基づいてデータフレームを分割する

  24. 24

    セル文字列に基づいてデータフレームを分割する

  25. 25

    Rの列値の文字列に基づいて、データフレームを2つのサブデータフレームに分割します

  26. 26

    行の集計数に基づいてパンダデータフレームの列を除外します

  27. 27

    列の値に基づいてパンダデータフレームから行を抽出します

  28. 28

    「RosettaStone」データフレームに基づいて、1つの文字列を新しい文字列にマップする新しい列を追加しますか?

  29. 29

    パンダ:列のnull値に基づいてデータフレームを分割する

ホットタグ

アーカイブ