r - 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
通话中。
解决方案
dplyr >= 1.0
由于1.0
,dplyr
提供了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
推荐阅读
- php - php中的3维数组
- design-patterns - 外观设计模式是否也只涉及类/模块或实际的 API 调用?
- opencv - 保存时图像为黑色,但打印时正常
- python - 访问嵌套字典中的更深层次的列表项?
- continuous-integration - 为什么外部 git 存储库不是 Azure 门户中部署中心的选项?
- swift - Swift 泛型:使用泛型类型的属性扩展非泛型类型,其中泛型参数是扩展类型
- jekyll - 更改博客文章的 Jekyll URL
- matlab - 如何删除极坐标图上的 theta 网格和半径网格?
- html - 3个下拉单独的下拉列表,只选择最上面的一个
- asp.net - 如果没有结果,Gridview 就会消失