如果数据按几个因素分组后,如果有多个级别,我正在尝试为我的数据集编码一列。为简单起见,我使用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)。
答案 0 :(得分:1)
gear
中的变量mtcars
不是因素,所以我认为你的意思是
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)
答案 1 :(得分:1)
mtcars %>%
group_by(cyl) %>%
mutate(Levels = ifelse(nlevels(as.factor(gear)) > 1, 1, 0))