我得到的tibble是8984次155,我需要cut()
并以相同的方式标记所有列,即使用相同的剪切和相同的标签来创建新的标签{ {3}}。我该如何以简单的方式做到这一点?
这里有3次3 tibble来模拟我的8984次155 tibble
# 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
时出错的人吗?
灵感来自tibble我正在尝试使用此
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'
我正在阅读手册以找出那个。
答案 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