首页 文章

使用Dplyr编码组内的多个级别

提问于
浏览
0

如果数据按几个因素分组后,如果有多个级别,我正在尝试为我的数据集编码一列 . 为简单起见,我使用mtcars数据集作为示例 . 我一直收到错误“错误:过滤条件不评估为逻辑向量” .

很明显,这种语法是不可接受的,但有没有人有更聪明的方法呢?

df_levels <-  mtcars %>%
   group_by(mpg) %>%
   filter(nlevels(.$gear) > 1) %>%
   mutate(Levels = 1) ##encode with a boolean value indicating more than one level

df_levels <-  df_levels %>%
   group_by(mpg) %>%
   filter(nlevels(.$gear) < 1) %>%
   mutate(Levels = 0)

因此,如果你点击新的df“df_levels”,并在df查看器中按mpg排序,你会看到一个列“level”= 0表示10.4 mpg的条目(因为只有gear = 3的数据),与30.4 mpg相关的列“级别”将具有值= 1,因为该数据分组中的齿轮有多个级别(齿轮= 4,齿轮= 5) .

2 回答

  • 1
    mtcars %>%
      group_by(cyl) %>%
      mutate(Levels = ifelse(nlevels(as.factor(gear)) > 1, 1, 0))
    
  • 1

    mtcars 中的变量 gear 不是一个因素,所以我认为你的意思

    mtcars$gear<-as.factor(mtcars$gear)
    

    然后,试试这个:

    library(dplyr)
    mtcars %>%
      group_by(cyl) %>%
      filter(nlevels(.$gear) > 1) %>%
      mutate(Levels = 1)
    

    我不确定你的问题是否是你所追求的,但至少它不会返回错误 .

    需要明确的是, dplyr 语法是非常干净的

    mtcars %>%
    group_by(cyl) %>%
    filter(nlevels(gear) > 1) %>%
    mutate(Levels = 1)
    

相关问题