从R中的分类变量的一个级别创建新的数据帧?

时间:2018-03-22 21:42:08

标签: r dataframe factors levels

list2env(split(df, df[,1]), envir = .GlobalEnv)

我发现此代码已经发布,但问题是我的关卡是数字还是单词之间有空格,我认为R不喜欢。因此,数据框显示在我的全球环境中,但我无法使用它们。当我在其上调用函数时,它们无法处理,并且它们不会显示在标签中。

我是R的新手,所以我不确定如何复制我的数据设置得非常好。它针对碰撞事故的24个变量进行了14,000次观测。

Neighborhood <- c("Westboro", "Hintonburg", "Downtown", "Downtown")
AccidentType <- c("Fatal injury", "property damage", "property damage", "injury")

Neighborhood <- as.factor(Neighborhood)
AccidentType <- as.factor(AccidentType)
df <- data.frame(Neighborhood, AccidentType)

假装我只对财产损失感兴趣并想要一个全新的数据框架,只显示财产损失事故。而且我也希望将旧数据保留在其原始数据框中。

感谢。对不起,我在R很可怕。

编辑:评论中的所有方法都与样本数据集一起使用,但出于某种原因不是我的实际数据集:(

当我尝试这些方法时,我得到了这个:

OttawaCollisions %>% filter(Collision_Classification=="Injury")
 [1] Record                   Location                 X                        Y                       
 [5] Date                     Time                     Environment              Road_Surface            
 [9] Traffic_Control          Collision_Location       Light                    Collision_Classification
[13] Impact_type              Seasons                  Holidays                 LunarPhase              
[17] DayofWeek                Accidents                Longitude                Latitude                
[21] Ward                     WardNumb                 NumText                  TimeCat                 
<0 rows> (or 0-length row.names)
> View(OttawaCollisions)
> subset(OttawaCollisions, Collision_Classification == "P.D. only")
 [1] Record                   Location                 X                        Y                       
 [5] Date                     Time                     Environment              Road_Surface            
 [9] Traffic_Control          Collision_Location       Light                    Collision_Classification
[13] Impact_type              Seasons                  Holidays                 LunarPhase              
[17] DayofWeek                Accidents                Longitude                Latitude                
[21] Ward                     WardNumb                 NumText                  TimeCat                 
<0 rows> (or 0-length row.names)

我不确定为什么会显示零行。这没有道理。我有很多数据(14,000点),它们都转换为因子。它们就是我在它们上面调用str()的时候。啊。

1 个答案:

答案 0 :(得分:1)

要明确注释中的内容,您只需过滤data.frame:

在基地R:

subset(df,AccidentType == "property damage")

使用dplyr:

filter(df,AccidentType == "property damage")

如果过滤成本很高,并且您只想制作一次(但如果您只有14k行则不然),您可以在列表中拆分df:

df_list <- split(df,df$AccidentType)

然后拨打df_list[["property damage"]]

因此,您不需要为每个data.frame使用单独的对象,也不建议这样做。