purrrを使用して列のペアに関数を適用するにはどうすればよいですか?

ダンボ

dplyrとの結合の結果として次のデータフレームがあります。

data_frame(id=1:4, a.x = c(1, NA, 3, 4), a.y = c(1, 2, 3, 4), b.x = c(NA, NA, 3, NA), b.y = c(2, 2, NA, 4)) 
# A tibble: 4 x 5
     id   a.x   a.y   b.x   b.y
  <int> <dbl> <dbl> <dbl> <dbl>
1     1     1     1    NA     2
2     2    NA     2    NA     2
3     3     3     3     3    NA
4     4     4     4    NA     4

そして、で終わる列のすべてのNAを、で終わる列.xの値に置き換えたいと思います.y最終的に、私はこれを達成したいと思います:

# A tibble: 4 x 5
     id   a.x   a.y   b.x   b.y
  <int> <dbl> <dbl> <dbl> <dbl>
1     1     1     1     2     2
2     2     2     2     2     2
3     3     3     3     3    NA
4     4     4     4     4     4

私は次のようなpurrrで試しました:

data_frame(id=1:4, a.x = c(1, NA, 3, 4), a.y = c(1, 2, 3, 4), b.x = c(NA, NA, 3, NA), b.y = c(2, 2, NA, 4)) %>%
  map2_dfr(.x = ends_with('.y'), .y = ends_with('.x'), ~ case_when(is.na(.x) ~ .y,
                                                                   TRUE ~ .x))

どちらが間違っています。ドキュメントは私には少し混乱しています。ここでの問題は、.xがベクトルを予期していることだと思いますが、列のリストを渡すにはどうすればよいですか?

www

ソリューション。私たちすることができgather、列、separateによって.arrange列によって、fillアップに向けて、値uniteの列、そして最終的にspread元の構造にデータフレーム。

library(tidyverse)

dat2 <- dat %>%
  gather(Column, Value, -id) %>%
  separate(Column, into = c("Col1", "Col2")) %>%
  arrange(id, Col1, Col2) %>%
  group_by(id, Col1) %>%
  fill(Value, .direction = "up") %>%
  unite(Column, Col1, Col2, sep = ".") %>%
  spread(Column, Value) %>%
  ungroup()
dat2
## A tibble: 4 x 5
#      id   a.x   a.y   b.x   b.y
# * <int> <dbl> <dbl> <dbl> <dbl>
# 1     1  1.00  1.00  2.00  2.00
# 2     2  2.00  2.00  2.00  2.00
# 3     3  3.00  3.00  3.00 NA   
# 4     4  4.00  4.00  4.00  4.00

または、データフレーム内の列の順序が適切な場合はtransposeパッケージの関数を使用できますが、処理後に列タイプが変更される可能性があることに注意してください。

dat2 <- dat %>%
  data.table::transpose() %>%
  fill(everything(), .direction = 'up') %>%
  data.table::transpose() %>%
  setNames(names(dat))
dat2
#   id a.x a.y b.x b.y
# 1  1   1   1   2   2
# 2  2   2   2   2   2
# 3  3   3   3   3  NA
# 4  4   4   4   4   4 

または、使用して、に列名がends_with「x」と「y」のサブセットを作成し、次に元の列の末尾を「x」に置き換えるソリューション

dat_x <- dat %>% select(ends_with("x"))
dat_y <- dat %>% select(ends_with("y"))

dat[, grepl("x$", names(dat))] <- map2(dat_x, dat_y, ~ifelse(is.na(.x), .y, .x)) 
dat
# # A tibble: 4 x 5
#      id   a.x   a.y   b.x   b.y
#   <int> <dbl> <dbl> <dbl> <dbl>
# 1     1  1.00  1.00  2.00  2.00
# 2     2  2.00  2.00  2.00  2.00
# 3     3  3.00  3.00  3.00 NA   
# 4     4  4.00  4.00  4.00  4.00

データ

dat <- data_frame(id=1:4, a.x = c(1, NA, 3, 4), a.y = c(1, 2, 3, 4), b.x = c(NA, NA, 3, NA), b.y = c(2, 2, NA, 4)) 

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

列の特定の組み合わせを変更する関数を適用するにはどうすればよいですか?(purrr ::優先使用)

分類Dev

パンダの入力として複数の列を使用する関数を適用するにはどうすればよいですか?

分類Dev

関数を複数の列に適用して、Rで複数の新しい列を作成するにはどうすればよいですか?

分類Dev

関数を作成してパンダの各行に適用するにはどうすればよいですか?

分類Dev

Rを使用してデータフレームの特定の列に関数を適用するにはどうすればよいですか?

分類Dev

.locを使用して列のスライスに関数を適用するにはどうすればよいですか?

分類Dev

複数のDataFrame列を使用して複雑な関数を適用するにはどうすればよいですか?

分類Dev

次に、tibbleの特定の列に関数を適用するにはどうすればよいですか?

分類Dev

データの複数の列に適用される条件を使用して新しい変数を作成するにはどうすればよいですか?

分類Dev

Rのsapply関数に特定の列を適用するにはどうすればよいですか?

分類Dev

関数を配列に適用して2つの別々の配列を形成するにはどうすればよいですか?

分類Dev

json配列の各要素に関数を適用するにはどうすればよいですか?

分類Dev

グループに関して列のペアを作成するにはどうすればよいですか?

分類Dev

Rの入力として複数のdata.framesを使用してカスタム関数を適用するにはどうすればよいですか?

分類Dev

Swiftを使用して関数fとfloatxを取り、fをxk回に適用する関数を作成するにはどうすればよいですか?

分類Dev

各要素のインデックスに関数を適用して、MATLABで配列を作成するにはどうすればよいですか?

分類Dev

Kotlinの配列にマップ関数を適用してその値を変更するにはどうすればよいですか?

分類Dev

パンダの場合、列を追加する関数をリサンプリングして適用するにはどうすればよいですか?

分類Dev

背景画像のURLのリストを作成し、jQueryを使用してクリック関数に適用するにはどうすればよいですか?

分類Dev

マップを使用して部分的に適用された関数のリストを作成するにはどうすればよいですか?

分類Dev

`cellfun`(MATLAB)を使用して複数のパラメーターを持つ関数を適用するにはどうすればよいですか?

分類Dev

変数を作成して列に適用するにはどうすればよいですか?

分類Dev

関数を適用して2つの列の値を交換するにはどうすればよいですか?

分類Dev

Knexを使用してwhere句の値に関数を適用するにはどうすればよいですか?

分類Dev

タイプを使用して特定のパラメーターのペアを適用するにはどうすればよいですか?

分類Dev

Numpyを使用して、値のペアと別の値の関係を表す関数を取得するにはどうすればよいですか?

分類Dev

関数を適用して列の値を変更するにはどうすればよいですか?(Pyspark 2.4.5-データブリックス)

分類Dev

Sparkで「and」を使用してsqlselectに空の条件を適用するにはどうすればよいですか?

分類Dev

pandas groupby関数を使用して、groupby値に基づいて数式を適用するにはどうすればよいですか?

Related 関連記事

  1. 1

    列の特定の組み合わせを変更する関数を適用するにはどうすればよいですか?(purrr ::優先使用)

  2. 2

    パンダの入力として複数の列を使用する関数を適用するにはどうすればよいですか?

  3. 3

    関数を複数の列に適用して、Rで複数の新しい列を作成するにはどうすればよいですか?

  4. 4

    関数を作成してパンダの各行に適用するにはどうすればよいですか?

  5. 5

    Rを使用してデータフレームの特定の列に関数を適用するにはどうすればよいですか?

  6. 6

    .locを使用して列のスライスに関数を適用するにはどうすればよいですか?

  7. 7

    複数のDataFrame列を使用して複雑な関数を適用するにはどうすればよいですか?

  8. 8

    次に、tibbleの特定の列に関数を適用するにはどうすればよいですか?

  9. 9

    データの複数の列に適用される条件を使用して新しい変数を作成するにはどうすればよいですか?

  10. 10

    Rのsapply関数に特定の列を適用するにはどうすればよいですか?

  11. 11

    関数を配列に適用して2つの別々の配列を形成するにはどうすればよいですか?

  12. 12

    json配列の各要素に関数を適用するにはどうすればよいですか?

  13. 13

    グループに関して列のペアを作成するにはどうすればよいですか?

  14. 14

    Rの入力として複数のdata.framesを使用してカスタム関数を適用するにはどうすればよいですか?

  15. 15

    Swiftを使用して関数fとfloatxを取り、fをxk回に適用する関数を作成するにはどうすればよいですか?

  16. 16

    各要素のインデックスに関数を適用して、MATLABで配列を作成するにはどうすればよいですか?

  17. 17

    Kotlinの配列にマップ関数を適用してその値を変更するにはどうすればよいですか?

  18. 18

    パンダの場合、列を追加する関数をリサンプリングして適用するにはどうすればよいですか?

  19. 19

    背景画像のURLのリストを作成し、jQueryを使用してクリック関数に適用するにはどうすればよいですか?

  20. 20

    マップを使用して部分的に適用された関数のリストを作成するにはどうすればよいですか?

  21. 21

    `cellfun`(MATLAB)を使用して複数のパラメーターを持つ関数を適用するにはどうすればよいですか?

  22. 22

    変数を作成して列に適用するにはどうすればよいですか?

  23. 23

    関数を適用して2つの列の値を交換するにはどうすればよいですか?

  24. 24

    Knexを使用してwhere句の値に関数を適用するにはどうすればよいですか?

  25. 25

    タイプを使用して特定のパラメーターのペアを適用するにはどうすればよいですか?

  26. 26

    Numpyを使用して、値のペアと別の値の関係を表す関数を取得するにはどうすればよいですか?

  27. 27

    関数を適用して列の値を変更するにはどうすればよいですか?(Pyspark 2.4.5-データブリックス)

  28. 28

    Sparkで「and」を使用してsqlselectに空の条件を適用するにはどうすればよいですか?

  29. 29

    pandas groupby関数を使用して、groupby値に基づいて数式を適用するにはどうすればよいですか?

ホットタグ

アーカイブ