【问题标题】:Need solution for recoding large number of variables需要重新编码大量变量的解决方案
【发布时间】:2022-01-04 19:36:15
【问题描述】:

我有一个包含英语和西班牙语版本问卷的数据集。问卷询问个人是否曾经接受过大量不同的诊断。每个变量采用prev_dx_major_depression 的形式表示英语数据,prev_dx_major_depression_span 表示西班牙语数据。

我想将两者组合成一个变量。我目前正在使用以下代码来实现此目的:

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

但是,我知道这对于如此大量的变量来说是非常低效的。我的预感是我需要使用mutate_atrecodestarts_withends_with 的组合。但是,我有点卡在这一点上,不知道如何将相应的变量匹配在一起。

这是一些示例数据:

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)
  ) 

【问题讨论】:

  • 如果您可以使用dput(x) 提供示例数据集,将会很有帮助。
  • 强烈同意。如果您可以提供一些具有 2 或 3 个变量对和大约 5 行数据的可重现数据,这将很好地说明问题并为我们提供一些工作。 dput(your_data[1:5, c("name_of_id_column", "prev_dx_major_depression", "prev_dx_major_depression_span", "example_column2", "example_column2_span")]) 会很完美。
  • 感谢您的提示 - 我用一些示例数据更新了问题。

标签: r tidyr


【解决方案1】:

一种选择是

  1. 重命名变量以在英文数据列中添加后缀 engl
  2. 转换为长格式,这样我们最终会得到一个包含变量名称的列以及西班牙和英语数据的两列
  3. 获取每个变量的唯一值
  4. 转换回宽格式
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多