首页 > 解决方案 > ifelse 按 r 中的列位置 - 列名未知

问题描述

我想在调用ifelse()里面使用dplyr::mutate(),但我不一定知道列名。虽然,这一栏永远是第一栏,所以我知道它的位置。有没有办法我可以做到这一点?

使用列名表示:

library(dplyr, warn.conflicts = FALSE)

tibble(x = 1:10, y = rnorm(10)) %>% 
  mutate(z = ifelse(x < 4, "a", "b"))
#> # A tibble: 10 x 3
#>        x       y z    
#>    <int>   <dbl> <chr>
#>  1     1  1.03   a    
#>  2     2 -0.600  a    
#>  3     3  0.0364 a    
#>  4     4  0.986  b    
#>  5     5 -0.815  b    
#>  6     6  0.166  b    
#>  7     7 -0.607  b    
#>  8     8 -0.719  b    
#>  9     9  0.799  b    
#> 10    10 -0.947  b

reprex 包于 2020-03-30 创建(v0.3.0)

现在我需要做同样的事情,而是使用列位置 (1)。喜欢:ifelse(**position 1** < 4, "a", "b")

这必须在dplyr::mutate通话中。

标签: rdplyr

解决方案


dplyr >= 1.0

由于1.0dplyr提供了cur_data()比滥用.管道操作员更好的功能,并确保该解决方案准确地处理分组数据。

tibble(x = 1:10, y = rnorm(10)) %>% 
    mutate(z = ifelse(cur_data()[[1]] < 4, "a", "b"))

原始答案

索引处的引用列i使用.[[i]].

tibble(x = 1:10, y = rnorm(10)) %>% 
  mutate(z = ifelse(.[[1]] < 4, "a", "b"))
#> # A tibble: 10 x 3
#>        x       y z    
#>    <int>   <dbl> <chr>
#>  1     1  0.255  a    
#>  2     2 -0.0805 a    
#>  3     3 -0.553  a    
#>  4     4 -0.492  b    
#>  5     5 -1.80   b    
#>  6     6  0.199  b    
#>  7     7 -0.397  b    
#>  8     8  1.06   b    
#>  9     9  1.72   b    
#> 10    10 -0.248  b

推荐阅读