データフレームのリストをピボットしてマージします

シャヒン

いくつかの行と列を共有する3つのデータフレームのリストがあります

データ

all_data <- list(questionnaireA = structure(list(name = structure(2:1, .Label = c("James", 
          "Shawn"), class = "factor"), banana = c(1, 0), grapes = c(1, 
          1), orange = c("AB", 1)), class = "data.frame", row.names = c(NA, 
          -2L)), questionnaireB = structure(list(name = structure(2:1, .Label = c("Chris", 
          "James"), class = "factor"), orange = c(1, 0), banana = c(1, 
          0)), class = "data.frame", row.names = c(NA, -2L)), questionnaireC = structure(list(
          name = structure(3:1, .Label = c("Donald", "James", "Shawn"
          ), class = "factor"), banana = c(1, 0, 0), raisins = c(1, 
          1, 1), grapes = c(1, 1, 0), cake = c(0, 1, 0)), class = "data.frame", row.names = c(NA, -3L)))
$questionnaireA
   name banana grapes orange
1 Shawn      1      1     AB
2 James      0      1      1

$questionnaireB
   name orange banana
1 James      1      1
2 Chris      0      0

$questionnaireC
    name banana raisins grapes cake
1  Shawn      1       1      1    0
2  James      0       1      1    1
3 Donald      0       1      0    0
library(tidyverse)
map(all_data, ~ .x %>%
    pivot_longer(cols=-name, names_to="fruit"))
  1. 値の名前をデータフレームの名前に変更する方法がわかりません。
  2. 値を結合して名前のフルーツペアを結合する方法がわかりません。

どんな助けでもいただければ幸いです!

akrun

OPが試みた方法と同様のオプションに従う場合、つまり、内の各データセットを「long」形式に再形成しlist、ループしてimaplist1要素の名前を新しい列として作成し、を使用pivot_longerして「long」形式に再形成します。グループごとにシーケンス列を作成し、「ワイド」形式に再形成します。pivot_wider

library(dplyr)
library(tidyr)
library(purrr)
imap_dfr(all_data, ~
                   .x %>% 
                      mutate(grp = .y) %>%
                      pivot_longer(cols = -c(name, grp), 
                         names_to = "fruit", values_to = "Value")) %>% 
   #group_by(name, grp, fruit) %>% 
   #mutate(rn = row_number()) %>%
   pivot_wider(names_from = grp, values_from = Value)

または、を使用してすべてのデータセットを単一のデータにバインドすることにより、これをより効率的にbind_cols実行しpivot_longer、不足している値を削除しながらvalue_drop_na = TRUE実行してから、上記のソリューションと同じように実行します。

bind_rows(all_data, .id = 'grp') %>%
    pivot_longer(cols = c(-name, -grp), names_to = "fruit", 
         values_to = "Value", values_drop_na = TRUE) %>%
    # sequence column creation is not really required for the example
    # as there are no duplicates
    #group_by(name, grp, fruit) %>% 
    #mutate(rn = row_number()) %>%
    pivot_wider(names_from = grp, values_from = Value)

更新

列タイプが混在する新しいデータに基づいて、「AB」などの値をそのままにしておく必要がある場合は、characterクラスに変換する必要があります

imap_dfr(all_data, ~
               .x %>% 
                  mutate_at(-1, as.character) %>% 
                  mutate(grp = .y) %>% 
                  pivot_longer(cols = -c(name, grp), names_to = "fruit",
                    values_to = "Value")) %>% 
       pivot_wider(names_from = grp, values_from = Value)

または、bind_rows以前と同様の効率的なアプローチ(ただし、列タイプが異なるため、ここでは実行できません)

map_dfr(all_data, ~
         .x %>%
            mutate_at(-1, as.character), .id = 'grp') %>%  
    pivot_longer(cols = c(-name, -grp), names_to = "fruit", 
          values_to = "Value", values_drop_na = TRUE)  %>%
    pivot_wider(names_from = grp, values_from = Value)

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

パンダのデータフレームをピボットして、マルチインデックスの列を作成します

分類Dev

リストを解除して、rの単一のデータフレームにマージします

分類Dev

3つのデータフレームをマトリックスにマージします

分類Dev

deedleデータフレームのピボットを解除します

分類Dev

データフレームのリストのリストをフォーマットします

分類Dev

パンダはデータフレームとピボットをマージして新しい列を作成します

分類Dev

tidyr ::ピボット_longerを使用して1行のデータフレームを変換する:列のペアを取得してスタックします

分類Dev

データフレームのリストをすべての行で単一のデータフレームにマージします

分類Dev

Rのリストを使用してデータフレームをマップします

分類Dev

R、データフレームのリストをマージして、各データフレームに固有の行を見つけます

分類Dev

R:データフレームのリストの2つのリストをマージします

分類Dev

r-リストをデータフレームにマージしてメルトします

分類Dev

1ページ目から2ページ目までのデータのリストをフラッターでマッピングして送信します

分類Dev

値をリストにグループ化して、データフレームをピボットに変換します

分類Dev

ピボットを使用してデータフレームを目的の形式に並べ替えます

分類Dev

パンダのデータフレームをピボットし、軸以外の列をシリーズとして取得します

分類Dev

リストを使用して2つのデータフレームをマージし、pandas / pythonを使用して単一の値にマッピングします

分類Dev

マルチインデックスを使用して、ピボットされたデータフレームから元のデータフレームを取得します

分類Dev

インデックスのリストを指定して、マルチインデックスデータフレームからデータを取得します

分類Dev

ネストされたリストをデータフレームにマージして、高次のリスト構造を維持します

分類Dev

Pandasデータフレームのマルチインデックスを使用したピボット

分類Dev

マージを使用してPandasデータセットのピボットを解除します

分類Dev

R:一致したデータフレームの2つのリストをマージします

分類Dev

インデックスに基づいて2つのデータフレーム(ピボットテーブルから作成された1つのdf)をマージします

分類Dev

インデックスとして2つの列を持つデータフレームをピボットします

分類Dev

Python Pandasは、ディクトマッピングを使用してデータフレームの各列にフォーマットを適用します

分類Dev

データフレームのリストとしてデータフレームに列を追加します

分類Dev

Rを使用してデータフレームの2つのリストをマージする

分類Dev

元のリストの列名なしで、ピボットされたパンダデータフレームから列名を取得します

Related 関連記事

  1. 1

    パンダのデータフレームをピボットして、マルチインデックスの列を作成します

  2. 2

    リストを解除して、rの単一のデータフレームにマージします

  3. 3

    3つのデータフレームをマトリックスにマージします

  4. 4

    deedleデータフレームのピボットを解除します

  5. 5

    データフレームのリストのリストをフォーマットします

  6. 6

    パンダはデータフレームとピボットをマージして新しい列を作成します

  7. 7

    tidyr ::ピボット_longerを使用して1行のデータフレームを変換する:列のペアを取得してスタックします

  8. 8

    データフレームのリストをすべての行で単一のデータフレームにマージします

  9. 9

    Rのリストを使用してデータフレームをマップします

  10. 10

    R、データフレームのリストをマージして、各データフレームに固有の行を見つけます

  11. 11

    R:データフレームのリストの2つのリストをマージします

  12. 12

    r-リストをデータフレームにマージしてメルトします

  13. 13

    1ページ目から2ページ目までのデータのリストをフラッターでマッピングして送信します

  14. 14

    値をリストにグループ化して、データフレームをピボットに変換します

  15. 15

    ピボットを使用してデータフレームを目的の形式に並べ替えます

  16. 16

    パンダのデータフレームをピボットし、軸以外の列をシリーズとして取得します

  17. 17

    リストを使用して2つのデータフレームをマージし、pandas / pythonを使用して単一の値にマッピングします

  18. 18

    マルチインデックスを使用して、ピボットされたデータフレームから元のデータフレームを取得します

  19. 19

    インデックスのリストを指定して、マルチインデックスデータフレームからデータを取得します

  20. 20

    ネストされたリストをデータフレームにマージして、高次のリスト構造を維持します

  21. 21

    Pandasデータフレームのマルチインデックスを使用したピボット

  22. 22

    マージを使用してPandasデータセットのピボットを解除します

  23. 23

    R:一致したデータフレームの2つのリストをマージします

  24. 24

    インデックスに基づいて2つのデータフレーム(ピボットテーブルから作成された1つのdf)をマージします

  25. 25

    インデックスとして2つの列を持つデータフレームをピボットします

  26. 26

    Python Pandasは、ディクトマッピングを使用してデータフレームの各列にフォーマットを適用します

  27. 27

    データフレームのリストとしてデータフレームに列を追加します

  28. 28

    Rを使用してデータフレームの2つのリストをマージする

  29. 29

    元のリストの列名なしで、ピボットされたパンダデータフレームから列名を取得します

ホットタグ

アーカイブ