【问题标题】:Recode multiple columns in dataframe R重新编码数据框 R 中的多列
【发布时间】:2020-01-26 22:56:01
【问题描述】:

我正在尝试将许多列的 Y 转换为 1,这些列可能会发生变化(例如,它可能会上升到 x20)。

下面是数据示例以及预期输出。

Data <- tibble(Date = seq.Date(as.Date('2019-01-01'),as.Date('2019-01-08'), by = "day"), 
               x1 = c("Y","","","Y","Y","","Y","Y"),
               x2 = c("","Y","Y","Y","Y","","Y","Y"))


Data_output <- tibble(Date = seq.Date(as.Date('2019-01-01'),as.Date('2019-01-08'), by = "day"), 
               x1 = c(1,0,0,1,1,0,1,1),
               x2 = c(0,1,1,1,1,0,1,1))

【问题讨论】:

    标签: r replace dplyr recode


    【解决方案1】:

    dplyr:

    Data %>% 
      mutate_at(vars(contains("x")),~case_when(.=="Y" ~1,
                                               .=="" ~0))
    

    或者按照@akrun 的建议:

    Data %>% 
      mutate_at(vars(contains("x")), ~as.integer(.=="Y"))  
    

    结果:

    # A tibble: 8 x 3
      Date          x1    x2
      <date>     <dbl> <dbl>
    1 2019-01-01     1     0
    2 2019-01-02     0     1
    3 2019-01-03     0     1
    4 2019-01-04     1     1
    5 2019-01-05     1     1
    6 2019-01-06     0     0
    7 2019-01-07     1     1
    8 2019-01-08     1     1
    

    【讨论】:

    • 谢谢正在尝试这样做但正在使用乐趣。
    【解决方案2】:

    base R,我们可以做

    Data[-1] <- +( Data[-1] == "Y")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多