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** &lt; 4, "a", "b")

这必须在dplyr::mutate 调用中。

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

您可以通过索引而不是名称来引用列,直接在数据框后面使用括号。

例如ifelse(df[1] &lt; 4, "a", "b")

【讨论】:

以上是关于ifelse 按 r 中的列位置 - 列名未知 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

R:识别并删除列名无效的列

将名称附加或粘贴到 R 中的列名称

根据列名重新排序熊猫数据框中的列[重复]

根据列名重新排序熊猫数据框中的列[重复]

根据列名重新排序熊猫数据框中的列[重复]

根据列名重新排序熊猫数据框中的列[重复]