ifelse 按 r 中的列位置 - 列名未知 [重复]
Posted
技术标签:
【中文标题】ifelse 按 r 中的列位置 - 列名未知 [重复]【英文标题】:ifelse by column position in r - column name is not known [duplicate] 【发布时间】:2020-07-10 16:41:54 【问题描述】:我想在dplyr::mutate()
调用中使用ifelse()
,但我不一定知道列名。虽然,这一列将永远是第一列,所以我知道它的位置。有什么办法可以做到吗?
使用列名表示:
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 package (v0.3.0) 于 2020 年 3 月 30 日创建
现在我需要做同样的事情,而是使用列位置 (1)。喜欢:ifelse(**position 1** < 4, "a", "b")
。
这必须在dplyr::mutate
调用中。
【问题讨论】:
【参考方案1】: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
【讨论】:
【参考方案2】:您可以通过索引而不是名称来引用列,直接在数据框后面使用括号。
例如ifelse(df[1] < 4, "a", "b")
【讨论】:
以上是关于ifelse 按 r 中的列位置 - 列名未知 [重复]的主要内容,如果未能解决你的问题,请参考以下文章