データフレームの行をいくつかの因子列にバインドします

ニック・レスニック

結合しようとしているdfに因子列が存在する場合dplyr::bind_rowsUnequal factor levels: coercing to character警告を回避するsuped-upバージョンを作成したいと思います(非因子列もある可能性があります)。次に例を示します。

df1 <- dplyr::data_frame(age = 1:3, gender = factor(c("male", "female", "female")), district = factor(c("north", "south", "west")))
df2 <- dplyr::data_frame(age = 4:6, gender = factor(c("male", "neutral", "neutral")), district = factor(c("central", "north", "east")))

その後、bind_rows_with_factor_columns(df1, df2)(警告なしで)戻ります:

dplyr::data_frame(
  age = 1:6,
  gender = factor(c("male", "female", "female", "male", "neutral", "neutral")),
  district = factor(c("north", "south", "west", "central", "north", "east"))
)

これが私がこれまでに持っているものです:

bind_rows_with_factor_columns <- function(...) {
  factor_columns <- purrr::map(..., function(df) {
      colnames(dplyr::select_if(df, is.factor))
  })

  if (length(unique(factor_columns)) > 1) {
      stop("All factor columns in dfs must have the same column names")
  }

  df_list <- purrr::map(..., function (df) {
    purrr::map_if(df, is.factor, as.character) %>% dplyr::as_data_frame()
  })

  dplyr::bind_rows(df_list) %>%
    purrr::map_at(factor_columns[[1]], as.factor) %>%
    dplyr::as_data_frame()
}

forcatsキャラクターに要素を強制する必要を潜在的に回避するためにパッケージを組み込む方法について誰かがアイデアを持っているかどうか、または同じ機能を維持しながらこれのパフォーマンスを向上させるための一般的な提案があるかどうか疑問に思っています(私はしたいtidyverse構文に固執する)。ありがとう!

ニック・レスニック

友人からの素晴らしい解決策に基づいて私自身の質問に答えるつもりです:

bind_rows_with_factor_columns <- function(...) {
  purrr::pmap_df(list(...), function(...) {
    cols_to_bind <- list(...)
    if (all(purrr::map_lgl(cols_to_bind, is.factor))) {
      forcats::fct_c(cols_to_bind)
    } else {
      unlist(cols_to_bind)
    }
  })
}

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

行/列の数が異なるいくつかのデータフレームをバインドする

分類Dev

因子変数の前の行からデータフレームに新しい列を作成します

分類Dev

Rはデータフレームを再配置します:いくつかの行を列に

分類Dev

Pythonパンダ:いくつかの列に基づいてデータフレームの行を比較し、値が最も低い行を削除します

分類Dev

パンダto_numeric()をデータフレームのいくつかの列に適用します

分類Dev

行は複数のデータフレームをバインドし、元のデータフレームの名前を列に追加します

分類Dev

いくつかの列の値によって、Rシャイニーでデータフレームを効率的にフィルタリングします

分類Dev

rの2つのデータフレームをバインドし、2つの列を融合します

分類Dev

パンダ列は2つのデータフレームをバインド(バインド)します

分類Dev

データフレームの列を他のいくつかの列に分割します

分類Dev

その行の値とその前のいくつかの行に基づいて、パンダデータフレームの行を取得します

分類Dev

パンダのデータフレームの別の列に基づく値でいくつかの新しい列を挿入します

分類Dev

因子の頻度がいくつかの数よりも低い場合、データフレームは因子の名前を変更します

分類Dev

パンダのデータフレームは、グループ内のいくつかの列の値をランダムにシャッフルします

分類Dev

列の条件に基づいて、単一のデータフレームからいくつかの異なるデータフレームを抽出します

分類Dev

データフレーム内のWHEREに基づいていくつかの列を選択します

分類Dev

リスト内のデータフレームの列にいくつかの関数を適用します

分類Dev

データブリックス上の別のpysparkデータフレームのいくつかの列に基づいて、大きなpysparkデータフレームの列に対してユーザー定義関数を実行します

分類Dev

Sparkデータフレームの行にいくつかの列を転置

分類Dev

リストタイプの列を持つデータフレームに新しい行を追加します

分類Dev

データフレームの行を列ごとに減算し、複数の因子列を保持します

分類Dev

いくつかの条件もありますが、データフレームの列の値に基づいてデータフレームのレコードをランダムに選択するにはどうすればよいですか?

分類Dev

データフレームpythonパンダのいくつかの列を選択します

分類Dev

PySparkデータフレームのいくつかの列にStringIndexerを適用します

分類Dev

1つのデータフレームからのn行のサブセットを複数の他のデータフレームの異なるn行のサブセットにバインドします

分類Dev

Rに埋め込まれたデータフレームを持つデータフレームを行バインドしますか?

分類Dev

因子列に基づく平均からの偏差である値のデータフレームを取得したい

分類Dev

dfの2つの列の値を持つ2つのデータフレームを、別のデータフレームの1つの列の値と結合します。いくつかの条件に基づいていますか?

分類Dev

Pythonデータ操作:1つの列からデータを分割して、同じデータフレーム内により多くの行を作成します

Related 関連記事

  1. 1

    行/列の数が異なるいくつかのデータフレームをバインドする

  2. 2

    因子変数の前の行からデータフレームに新しい列を作成します

  3. 3

    Rはデータフレームを再配置します:いくつかの行を列に

  4. 4

    Pythonパンダ:いくつかの列に基づいてデータフレームの行を比較し、値が最も低い行を削除します

  5. 5

    パンダto_numeric()をデータフレームのいくつかの列に適用します

  6. 6

    行は複数のデータフレームをバインドし、元のデータフレームの名前を列に追加します

  7. 7

    いくつかの列の値によって、Rシャイニーでデータフレームを効率的にフィルタリングします

  8. 8

    rの2つのデータフレームをバインドし、2つの列を融合します

  9. 9

    パンダ列は2つのデータフレームをバインド(バインド)します

  10. 10

    データフレームの列を他のいくつかの列に分割します

  11. 11

    その行の値とその前のいくつかの行に基づいて、パンダデータフレームの行を取得します

  12. 12

    パンダのデータフレームの別の列に基づく値でいくつかの新しい列を挿入します

  13. 13

    因子の頻度がいくつかの数よりも低い場合、データフレームは因子の名前を変更します

  14. 14

    パンダのデータフレームは、グループ内のいくつかの列の値をランダムにシャッフルします

  15. 15

    列の条件に基づいて、単一のデータフレームからいくつかの異なるデータフレームを抽出します

  16. 16

    データフレーム内のWHEREに基づいていくつかの列を選択します

  17. 17

    リスト内のデータフレームの列にいくつかの関数を適用します

  18. 18

    データブリックス上の別のpysparkデータフレームのいくつかの列に基づいて、大きなpysparkデータフレームの列に対してユーザー定義関数を実行します

  19. 19

    Sparkデータフレームの行にいくつかの列を転置

  20. 20

    リストタイプの列を持つデータフレームに新しい行を追加します

  21. 21

    データフレームの行を列ごとに減算し、複数の因子列を保持します

  22. 22

    いくつかの条件もありますが、データフレームの列の値に基づいてデータフレームのレコードをランダムに選択するにはどうすればよいですか?

  23. 23

    データフレームpythonパンダのいくつかの列を選択します

  24. 24

    PySparkデータフレームのいくつかの列にStringIndexerを適用します

  25. 25

    1つのデータフレームからのn行のサブセットを複数の他のデータフレームの異なるn行のサブセットにバインドします

  26. 26

    Rに埋め込まれたデータフレームを持つデータフレームを行バインドしますか?

  27. 27

    因子列に基づく平均からの偏差である値のデータフレームを取得したい

  28. 28

    dfの2つの列の値を持つ2つのデータフレームを、別のデータフレームの1つの列の値と結合します。いくつかの条件に基づいていますか?

  29. 29

    Pythonデータ操作:1つの列からデータを分割して、同じデータフレーム内により多くの行を作成します

ホットタグ

アーカイブ