【发布时间】:2019-09-12 11:05:45
【问题描述】:
我想根据一列的不同类别生成不同的因子水平,但是当我尝试以下操作时:
library(dplyr)
library(tidyr)
library(rap) # devtools::install_github("romainfrancois/rap")
df <- dplyr::tibble(
category = rep(letters[1:2], each = 3),
value = c(1, 4, 8, 21, 24, 28)
) %>%
tidyr::nest(data = -category) %>%
rap::rap(labels = ~ case_when(
category == "a" ~ cut(data$value, c(0, 3, 6, 10), labels = c("< 3", "3 - 6", "> 6")),
category == "b" ~ cut(data$value, c(0, 23, 26, 30), labels = c("< 23", "23 - 26", "> 26"))
)
)
#> Warning in `[<-.factor`(`*tmp*`, i, value = structure(1:3, .Label = c("<
#> 23", : invalid factor level, NA generated
df
#> # A tibble: 2 x 3
#> category data labels
#> <chr> <list<df[,1]>> <list>
#> 1 a [3 × 1] <fct [3]>
#> 2 b [3 × 1] <fct [3]>
由reprex package (v0.3.0) 于 2019 年 9 月 12 日创建
第二类关卡我得到NA:
df %>%
unnest(labels)
#> # A tibble: 6 x 3
#> category value labels
#> <chr> <dbl> <fct>
#> 1 a 1 < 3
#> 2 a 4 3 - 6
#> 3 a 8 > 6
#> 4 b 21 <NA>
#> 5 b 24 <NA>
#> 6 b 28 <NA>
有人知道如何根据不同的类别生成不同的关卡吗?
这是所需的输出:
#> # A tibble: 6 x 3
#> category value labels
#> <chr> <dbl> <fct>
#> 1 a 1 < 3
#> 2 a 4 3 - 6
#> 3 a 8 > 6
#> 4 b 21 < 23
#> 5 b 24 23 - 26
#> 6 b 28 > 26
【问题讨论】:
-
你可以做
df %>% mutate(lable = case_when(category == "a" & value < 3 ~ "< 3", category == "a" & value %in% c(3:6) ~ "3-6", category == "a" & value > 6 ~ "> 6", category == "b" & value < 23 ~ "< 23", category == "b" & value %in% c(23:26) ~ "23-26", category == "b" & value > 26 ~ "> 26", TRUE ~ NA_character_))。 -
确实如此,但后来我失去了因素
-
你为什么要用嵌套的数据做这个?这样做有什么好处/你的计划?
-
因为我想保留每个类别的因子水平