R一致する複数の列の変更

とうまい

私は自分の研究に適合した大きなデータセットを処理しています。次のように、4つの観測値(レコード)と5つの列があるとします。

x <- data.frame("ID" = c(1, 2, 3, 4),
                "group1" = c("A", NA, "B", NA), 
                "group2" = c("B", "A", NA, "C"),
                "hours1" = c(3, NA, 5, NA),
                "hours2" = c(1, 2, NA, 5))

> x
ID group1 group2 hours1 hours2
 1      A      B      3      1
 2   <NA>      A     NA      2
 3      B   <NA>      5     NA
 4   <NA>      C     NA      5

「group1」と「group2」はA、B、Cの文字値を含む参照列であり、最後の2つの列「hours1」と「hours2」は明らかに時間を示す数値です。

列「group1」は列「hours1」に対応します。同様に、「group2」は「2時間目」に対応します。

次のように、「hours1」と「hours2」の値に一致する参照列の値A、B、およびCに従って複数の列を作成したいと思います。

ID group1 group2 hours1 hours2  A  B  C
 1      A      B      3      1  3  1 NA
 2   <NA>      A     NA      2  2 NA NA
 3      B   <NA>      5     NA NA  5 NA
 4   <NA>      C     NA      5 NA NA  5

たとえば、ID 1の「group1」にはAがあり、「A」列の下にある「hours1」の3に対応します。ID 3の「group1」にはBがあり、「B」列の下にある「hours1」の5に対応します。「グループ2」では、ID 4にはCがあり、「C」列の下にあるhours2の5に対応します。

Rを使用してそれを行う方法はありますか?

ロナックシャー

1つの方法は、すべての「時間」列を1つの列に結合し、「グループ」列を別の列に結合することです。これは、を使用して実行できますpivot_longerその後、ワイドフォーマットのデータを取得し、元のデータと結合することができます。

library(dplyr)
library(tidyr)

x %>%
  pivot_longer(cols = -ID, 
               names_to = c('.value'), 
               names_pattern = '(.*?)\\d+', 
               values_drop_na = TRUE) %>%
  pivot_wider(names_from = group, values_from = hours) %>%
  left_join(x, by = 'ID') %>%
  select(ID, starts_with('group'), starts_with('hour'), everything())

# A tibble: 4 x 8
#     ID group1 group2 hours1 hours2     A     B     C
#  <dbl> <chr>  <chr>   <dbl>  <dbl> <dbl> <dbl> <dbl>
#1     1 A      B           3      1     3     1    NA
#2     2 NA     A          NA      2     2    NA    NA
#3     3 B      NA          5     NA    NA     5    NA
#4     4 NA     C          NA      5    NA    NA     5

OPのデータセットの場合、コードを少し変更して、目的の結果を得ることができます。

zz %>%
  pivot_longer(cols = -id, 
               names_to = c('.value'), 
               names_pattern = '(.*)_', 
               values_drop_na = TRUE) %>%
  arrange(fu2a) %>%
  pivot_wider(names_from = fu2a, values_from = fu2b) %>%
  left_join(zz, by = 'id') %>%
  select(id, starts_with('fu2a'), starts_with('fu2b'), everything())

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

R部分的な文字列の一致に基づいて複数の列の名前を変更する-パイプ

分類Dev

Python3-複数の正規表現に一致する文字列を変更せずに生成します

分類Dev

正規表現:複数の一致を検索して変更する

分類Dev

複数の列で最も一致する列を検索するR

分類Dev

1つの列の複数の文字列を別の列の複数の文字列と一致させるには、Rの一致を削除しますか?

分類Dev

Rの文字列内の複数のパターンに一致する

分類Dev

複数の配列の一致する要素を数える

分類Dev

Perlの複数行の一致を変数にBashする

分類Dev

配列内の複数の基準に一致する

分類Dev

gzipファイルの複数の列に一致する

分類Dev

同じ行内の複数の列に一致する

分類Dev

複数の配列内の変数の完全一致を見つける

分類Dev

複数の名に一致する

分類Dev

一致に基づいて列の値を変更する

分類Dev

一致に基づいて列の値を変更する

分類Dev

パターンに一致する複数のディレクトリの名前を変更する

分類Dev

配列の配列に対するPerl一致変数

分類Dev

SQLのLIKE条件に一致する空の文字列変数

分類Dev

配列内の一致する変数の検索

分類Dev

複数の文字列に一致する正規表現

分類Dev

複数の列で一致をカウントする

分類Dev

複数行の文字列に一致する正規表現

分類Dev

複数の文字列に一致する正規表現

分類Dev

変数内の一致する文字列を取得します

分類Dev

複数のパターンを一致させ、sedで1つの部分を変更する方法

分類Dev

複数のパターンを一致させ、sedで1つの部分を変更する方法

分類Dev

複数のフォルダの変更日を、最近変更されたファイルの日付と一致するように変更します

分類Dev

R:文字列のベクトルで複数の文字列の一致を検索する

分類Dev

複数の列で一致する値を探し、一致した列の先頭を返します

Related 関連記事

  1. 1

    R部分的な文字列の一致に基づいて複数の列の名前を変更する-パイプ

  2. 2

    Python3-複数の正規表現に一致する文字列を変更せずに生成します

  3. 3

    正規表現:複数の一致を検索して変更する

  4. 4

    複数の列で最も一致する列を検索するR

  5. 5

    1つの列の複数の文字列を別の列の複数の文字列と一致させるには、Rの一致を削除しますか?

  6. 6

    Rの文字列内の複数のパターンに一致する

  7. 7

    複数の配列の一致する要素を数える

  8. 8

    Perlの複数行の一致を変数にBashする

  9. 9

    配列内の複数の基準に一致する

  10. 10

    gzipファイルの複数の列に一致する

  11. 11

    同じ行内の複数の列に一致する

  12. 12

    複数の配列内の変数の完全一致を見つける

  13. 13

    複数の名に一致する

  14. 14

    一致に基づいて列の値を変更する

  15. 15

    一致に基づいて列の値を変更する

  16. 16

    パターンに一致する複数のディレクトリの名前を変更する

  17. 17

    配列の配列に対するPerl一致変数

  18. 18

    SQLのLIKE条件に一致する空の文字列変数

  19. 19

    配列内の一致する変数の検索

  20. 20

    複数の文字列に一致する正規表現

  21. 21

    複数の列で一致をカウントする

  22. 22

    複数行の文字列に一致する正規表現

  23. 23

    複数の文字列に一致する正規表現

  24. 24

    変数内の一致する文字列を取得します

  25. 25

    複数のパターンを一致させ、sedで1つの部分を変更する方法

  26. 26

    複数のパターンを一致させ、sedで1つの部分を変更する方法

  27. 27

    複数のフォルダの変更日を、最近変更されたファイルの日付と一致するように変更します

  28. 28

    R:文字列のベクトルで複数の文字列の一致を検索する

  29. 29

    複数の列で一致する値を探し、一致した列の先頭を返します

ホットタグ

アーカイブ