Saya memiliki kumpulan data dengan kuesioner versi bahasa Inggris dan Spanyol. Kuesioner menanyakan apakah individu pernah menerima sejumlah besar diagnosis yang berbeda. Setiap variabel mengambil bentuk prev_dx_major_depression untuk data bahasa Inggris dan prev_dx_major_depression_span untuk data bahasa Spanyol.

Saya ingin menggabungkan keduanya menjadi satu variabel. Saat ini saya menggunakan kode berikut untuk mencapai tujuan ini:

mutate(
    prev_dx_major_depression = if_else(prev_dx_major_depression == 1 | 
                                         prev_dx_major_depression_span == 1,
                                            1, 0
                                               ))

Namun, saya tahu ini sangat tidak efisien untuk sejumlah besar variabel. Firasat saya adalah bahwa saya harus menggunakan beberapa kombinasi mutate_at, recode, starts_with dan ends_with. Namun, saya agak terjebak pada titik ini dan tidak yakin bagaimana mencocokkan variabel yang sesuai bersama-sama.

Berikut beberapa contoh datanya:

sample_data <- 
  structure(
    list(
      id = 1:5,
      prev_dx_major_depression = c(0, 1, 1,
                                   0, 0),
      prev_dx_bipolar = c(0, 0, 0, 0, 0),
      prev_dx_generalized_anxiety = c(1,
                                      1, 0, 0, 0),
      prev_dx_major_depression_span = c(NA, NA, NA, NA,
                                        1),
      prev_dx_bipolar_span = c(NA, NA, NA, NA, NA),
      prev_dx_generalized_anxiety_span = c(NA,
                                           NA, NA, NA, 1)
    ),
    class = "data.frame",
    row.names = c(NA,-5L)
  ) 
1
runlikeagirl 26 November 2021, 23:03
1
Akan sangat membantu jika Anda dapat memberikan contoh kumpulan data menggunakan dput(x).
 – 
Nad Pat
26 November 2021, 23:07
Sangat setuju. Jika Anda dapat memberikan beberapa data yang dapat direproduksi dengan 2 atau 3 pasangan variabel dan sekitar 5 baris data yang akan menggambarkan masalah dengan baik dan memberi kami sesuatu untuk dikerjakan. dput(your_data[1:5, c("name_of_id_column", "prev_dx_major_depression", "prev_dx_major_depression_span", "example_column2", "example_column2_span")]) akan sempurna.
 – 
Gregor Thomas
26 November 2021, 23:26
Terima kasih atas tipnya - Saya memperbarui pertanyaan dengan beberapa data sampel.
 – 
runlikeagirl
26 November 2021, 23:45

1 menjawab

Jawaban Terbaik

Salah satu pilihannya adalah

  1. Ganti nama variabel Anda untuk menambahkan postfix engl ke kolom data bahasa Inggris
  2. Konversikan ke format panjang sehingga kita berakhir dengan kolom yang berisi nama variabel dan dua kolom untuk data Spanyol dan Inggris
  3. Dapatkan nilai unik Anda untuk setiap variabel
  4. Konversi kembali ke format lebar
library(dplyr)
library(tidyr)

rename_with(sample_data, ~ paste0(.x, "_engl"), .cols = !c(ends_with("_span"), id)) %>% 
  pivot_longer(-id, names_to = c("var", ".value"), names_pattern = "^(.*)_(.*)$") %>% 
  mutate(value = if_else(span %in% 1 | engl %in% 1, 1, 0)) %>% 
  select(-engl, -span) %>% 
  pivot_wider(names_from = var, values_from = value)
#> # A tibble: 5 × 4
#>      id prev_dx_major_depression prev_dx_bipolar prev_dx_generalized_anxiety
#>   <int>                    <dbl>           <dbl>                       <dbl>
#> 1     1                        0               0                           1
#> 2     2                        1               0                           1
#> 3     3                        1               0                           0
#> 4     4                        0               0                           0
#> 5     5                        1               0                           1
1
stefan 27 November 2021, 00:41