【问题标题】:Define a new variable name based on a conditon within R dplyr universe (mutate, if, ifelse)根据 R dplyr universe 中的条件定义一个新的变量名(mutate, if, if else)
【发布时间】:2022-12-20 01:45:14
【问题描述】:

我想在 dplyr 工作流程中添加一个新变量并根据条件定义变量名称。有很多关于使用 ifelse() 进行条件变异的讨论,讨论的是如何定义给定变量的值,但没有讨论如何有条件地定义名称。

就像是:

Test <- 'A'
Test_results <- c(1.1, 33, 343, 2.22, 2.4)
##
iris<- iris%>%
 dplyr::mutate(
  ifelse(Test=='A',
         Test_A=Test_results,
         ifelse(Test=='B',
                Test_B=Test_results,
                no_Test='no_results')) )

期望的输出(假定 Test &lt;- 'A')是:

> iris
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species  Test_A
1            5.1         3.5          1.4         0.2     setosa     1.1
2            4.9         3.0          1.4         0.2     setosa      33
3            4.7         3.2          1.3         0.2     setosa     343
4            4.6         3.1          1.5         0.2     setosa    2.22
5            5.0         3.6          1.4         0.2     setosa     2.4
...

如果Test &lt;- 'B',结果应该是:

 > iris
        Sepal.Length Sepal.Width Petal.Length Petal.Width    Species  Test_B
    1            5.1         3.5          1.4         0.2     setosa     1.1
    2            4.9         3.0          1.4         0.2     setosa      33
    3            4.7         3.2          1.3         0.2     setosa     343
    4            4.6         3.1          1.5         0.2     setosa    2.22
    5            5.0         3.6          1.4         0.2     setosa     2.4
...

变量“测试”在用户驾驶舱的某处定义,并对多个嵌套脚本产生影响(因此请不要硬编码)。

【问题讨论】:

    标签: if-statement variables dplyr conditional-statements mutate


    【解决方案1】:

    dplyr::rename_at 应该可以。创建一个包含测试的列,并使用依赖于 Test 的函数重命名它。

    Test <- 'A'
    Test_results <- c(1.1, 33, 343, 2.22, 2.4)
    
    iris %>%
      head(n = 5) %>%
      mutate(Test_results = Test_results) %>%
      rename_at('Test_results', (x) case_when(Test %in% c('A', 'B') ~ paste0('Test_', Test),
                                               TRUE ~ 'no_results'))
    

    【讨论】:

      猜你喜欢
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      • 2018-05-06
      • 2021-12-08
      • 2020-07-30
      • 2018-12-09
      • 1970-01-01
      • 2019-02-01
      相关资源
      最近更新 更多