使用Dplyr对组内的多个级别进行编码
我试图为我的数据集编码一列,如果数据被几个因素分组后有多个级别。为简单起见,我以mtcars数据集为例。我不断得到错误“error:filter条件的计算结果不是逻辑向量。” 很明显,这种语法是不可接受的,但是有人有更聪明的方法吗使用Dplyr对组内的多个级别进行编码,r,dplyr,subset,R,Dplyr,Subset,我试图为我的数据集编码一列,如果数据被几个因素分组后有多个级别。为简单起见,我以mtcars数据集为例。我不断得到错误“error:filter条件的计算结果不是逻辑向量。” 很明显,这种语法是不可接受的,但是有人有更聪明的方法吗 df_levels <- mtcars %>% group_by(mpg) %>% filter(nlevels(.$gear) > 1) %>% mutate(Levels = 1) ##encode with a
df_levels <- mtcars %>%
group_by(mpg) %>%
filter(nlevels(.$gear) > 1) %>%
mutate(Levels = 1) ##encode with a boolean value indicating more than one level
df_级别%
分组依据(mpg)%>%
过滤器(NL水平(.$档位)>1%%>%
mutate(Levels=1)##使用表示多个级别的布尔值进行编码
及
df_级别%
分组依据(mpg)%>%
过滤器(NL液位(.$档位)<1%%>%
变异(级别=0)
因此,如果您单击新的df“df_levels”,并在df查看器中按mpg排序,您将看到一列“levels”=0,用于10.4 mpg的条目(因为只有档位=3的数据),而与30.4 mpg关联的列“levels”的值将为1,因为该数据分组中有多个档位(档位=4,档位=5). mtcars中的变量
gear
不是一个因素,所以我想你的意思是
mtcars$gear<-as.factor(mtcars$gear)
通过你的问题,我不确定这是否是你想要的,但至少它不会返回错误
更清楚的是,dplyr
语法非常简洁
mtcars %>%
group_by(cyl) %>%
filter(nlevels(gear) > 1) %>%
mutate(Levels = 1)
mtcars
中的变量gear
不是一个因素,因此我认为您的意思是
mtcars$gear<-as.factor(mtcars$gear)
通过你的问题,我不确定这是否是你想要的,但至少它不会返回错误
更清楚的是,dplyr
语法非常简洁
mtcars %>%
group_by(cyl) %>%
filter(nlevels(gear) > 1) %>%
mutate(Levels = 1)
str(mtcars$gear)num[1:32]4 4 3 3 3 3 4 4 4 4…str(mtcars$gear)num[1:32]4 4 4 3 3 3 3 4 4 4…仍不确定此操作是否有效。。假设您按mpg分组,并关注齿轮的NL水平。对于10.4 mpg条目,新DF的列级别值为“0”,对于30.4 mpg条目,新DF的列级别值为“1”。我认为@BryanGoggin也有同样的问题。你可以通过编辑这个问题来澄清你的预期结果吗?@jacobOdom,如果你将小组切换到mpg,你会得到你建议的结果。下面是代码:
mtcars%%>%groupby(mpg)%%>%mutate(Levels=ifelse(nlevels(as.factor(gear))>1,1,0))
@Edward不确定我第一次运行这个时把什么搞砸了。我清除了变量,让它开始工作。谢谢你的帮助和耐心!仍然不确定这是否有效。。假设您按mpg分组,并关注齿轮的NL水平。对于10.4 mpg条目,新DF的列级别值为“0”,对于30.4 mpg条目,新DF的列级别值为“1”。我认为@BryanGoggin也有同样的问题。你可以通过编辑这个问题来澄清你的预期结果吗?@jacobOdom,如果你将小组切换到mpg,你会得到你建议的结果。下面是代码:mtcars%%>%groupby(mpg)%%>%mutate(Levels=ifelse(nlevels(as.factor(gear))>1,1,0))
@Edward不确定我第一次运行这个时把什么搞砸了。我清除了变量,让它开始工作。谢谢你的帮助和耐心!仍然不确定这是否有效。。假设您按mpg分组,并关注齿轮的NL水平。对于10.4 mpg条目,新DF的列级别值为“0”,对于30.4 mpg条目,新DF的列级别值为“1”。很抱歉,我不明白您想做什么。我刚修正了你原来的语法。我很高兴@Edward R.Mazurek能够提供帮助。但我仍然不确定这是否有效。。假设您按mpg分组,并关注齿轮的NL水平。对于10.4 mpg条目,新DF的列级别值为“0”,对于30.4 mpg条目,新DF的列级别值为“1”。很抱歉,我不明白您想做什么。我刚修正了你原来的语法。我很高兴@Edward R.Mazurek能够提供帮助。
mtcars %>%
group_by(cyl) %>%
mutate(Levels = ifelse(nlevels(as.factor(gear)) > 1, 1, 0))