【问题标题】:Forcing names with comparison operators in R (dplyr, rlang, tidy)在 R 中使用比较运算符强制命名(dplyr、rlang、tidy)
【发布时间】:2020-10-16 23:09:45
【问题描述】:

当我在 LHS 上有一个强制表达式名称时,可以使用 := 代替 ==< 等的等效项是什么?

library(dplyr)
library(tibble)

i <- 1

dat <- tibble(n = 1:5) %>%
    rowwise() %>%
    mutate(!! paste0("x_", i) := rbinom(1, 1, .5),
           x_2 = 1)
dat %>%
    mutate(!! paste0("test_", i) := case_when(!! paste0("x_", i) < !! paste0("x_", 2) ~ 1, TRUE ~ 0))

dat %>%
    mutate(!! paste0("test_", i+1) := case_when(!! paste0("x_", i) == !! paste0("x_", 2) ~ 1, TRUE ~ 0))

没有:==, :

【问题讨论】:

    标签: r dplyr rlang


    【解决方案1】:

    我们需要转换为symbol 并评估 (!!)。另外,最好ungroup在进行比较之前删除rowwise属性

    library(dplyr)
    dat %>%
        ungroup %>%
        mutate(!! paste0("test_", i) := 
        case_when(!! rlang::sym(paste0("x_", i)) < 
                  !! rlang::sym(paste0("x_", 2)) ~ 1,
                 TRUE ~ 0))
    

    -输出

    # A tibble: 5 x 4
    #      n   x_1   x_2 test_1
    #  <int> <int> <dbl>  <dbl>
    #1     1     1     1      0
    #2     2     0     1      1
    #3     3     0     1      1
    #4     4     1     1      0
    #5     5     0     1      1
    

    【讨论】:

      【解决方案2】:

      其他几个选项是:

      1. .data
      library(dplyr)
      
      dat %>%
        ungroup %>%
        mutate(!!paste0("test_", i) := 
                 case_when(.data[[paste0("x_", i)]] < .data[[paste0("x_", 2)]] ~ 1,
                           TRUE ~ 0))
      
      #      n   x_1   x_2 test_1
      #  <int> <int> <dbl>  <dbl>
      #1     1     1     1      0
      #2     2     0     1      1
      #3     3     1     1      0
      #4     4     1     1      0
      #5     5     1     1      0
      
      1. get
      dat %>%
        ungroup %>%
        mutate(!!paste0("test_", i) := 
                 case_when(get(paste0("x_", i)) < get(paste0("x_", 2)) ~ 1,
                           TRUE ~ 0))
      

      【讨论】:

        猜你喜欢
        • 2016-04-28
        • 1970-01-01
        • 2019-07-02
        • 2013-12-07
        • 2019-08-18
        • 2023-03-26
        • 2013-01-19
        • 2017-08-02
        相关资源
        最近更新 更多