Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Dplyr对组内的多个级别进行编码_R_Dplyr_Subset - Fatal编程技术网

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

使用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

我试图为我的数据集编码一列,如果数据被几个因素分组后有多个级别。为简单起见,我以mtcars数据集为例。我不断得到错误“error:filter条件的计算结果不是逻辑向量。”

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

 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))