cut()并用相同的断点和标签标记e tot

时间:2018-02-17 14:16:15

标签: r automation label cut tibble

我得到的是8984次155,我需要cut()并以相同的方式标记所有列,即使用相同的剪切和相同的标签来创建新的标签{ {3}}。我该如何以简单的方式做到这一点?

这里有3次3 来模拟我的8984次155

# install.packages(c("tidyverse", "lubridate"), dependencies = TRUE)
require(tidyverse)
df <- tibble(x = 1:3, y = c(4, NA, 6))
df <- df %>% mutate(iD = row_number())
#> # A tibble: 3 x 3
#>       x     y    iD
#>   <int> <dbl> <int>
#> 1     1  4.00     1
#> 2     2 NA        2
#> 3     3  6.00     3

现在,我现在将它标记为这样,我意识到我可以创建一个breaks objcet和一个labels对象并重复使用它们,但是我没有办法解决这个问题。 mutate()致电?

df_labeled <-  df %>% mutate(x = cut(x, breaks = c(-Inf,1,3,6),
   labels = c('Low', 'middle', 'high'), include.lowest = TRUE),
                             y = cut(y, breaks = c(-Inf,1,3,6),
   labels = c('Low', 'middle', 'high'), include.lowest = TRUE)) %>% 
                                                                 select(iD, x, y)

这给了我想要的东西,但我正在寻找一种更通用的方式。

df_labeled
#> # A tibble: 3 x 3
#>      iD x      y    
#>   <int> <fct>  <fct>
#> 1     1 Low    high 
#> 2     2 middle <NA> 
#> 3     3 middle high

P.S。我是唯一一个在调用我的id变量id时出错的人吗?

灵感来自我正在尝试使用此

df %>% mutate_at(vars(-iD),cut(as.numeric(.), breaks = c(-Inf,1,3,6), 
            labels = c('Low', 'middle', 'high'), include.lowest = TRUE)) 

但我仍然收到错误,

Error in cut(as.numeric(.), breaks = c(-Inf, 1, 3, 6), labels = c("Low",  : 
  (list) object cannot be coerced to type 'double'

我正在阅读手册以找出那个。

1 个答案:

答案 0 :(得分:1)

您在应用jazzurro评论时遇到的困难是因为您不需要as.numeric(.)

df %>%
    mutate_at(vars(-iD), cut, breaks = c(-Inf, 1, 3, 6), include.lowest = TRUE,
              labels = c('Low', 'middle', 'high'))

# A tibble: 3 x 3
       x      y    iD
  <fctr> <fctr> <int>
1    Low   high     1
2 middle   <NA>     2
3 middle   high     3