首页 > 解决方案 > 如何在子集化后消除 R 数据集中因子变量中的水平?

问题描述

在下面的数据集中,子集之前的变量Region具有以下结构:

> levels(corona$Region)
  [1] " Montreal, QC"                              
  [2] "Alabama"                                    
  [3] "Alameda County, CA"                         
  [4] "Alaska"                                     
  [5] "Alberta"                                    
  [6] "American Samoa"                             
  [7] "Anhui" ...

包括美国各州以及县、市等。

我想仅对运行代码的美国各州进行子集化:

require(RCurl)
require(foreign)
require(tidyverse) 

corona = read.csv("https://coviddata.github.io/covid-api/v1/regions/cases.csv", sep =",",header = T)

cor <- corona[corona$Country=="United States" & corona$Region %in% state.name,]

这在某种程度上有效,但以某种方式保持了原始水平Region

> levels(cor$Region)
  [1] " Montreal, QC"                              
  [2] "Alabama"                                    
  [3] "Alameda County, CA"                         
  [4] "Alaska"                                     
  [5] "Alberta"                                    
  [6] "American Samoa"                             
  [7] "Anhui"                                      
  [8] "Arizona"                                    
  [9] "Arkansas"                                   
 [10] "Aruba"   ...

好像子集从未发生过。我怎样才能只保留子集的级别(状态)?

标签: rsubset

解决方案


你可以试试

cor <- droplevels(cor)

这里,一个使用iris数据集的例子:

ir <- subset(iris, Species != "setosa")

> str(ir)
'data.frame':   100 obs. of  5 variables:
 $ Sepal.Length: num  7 6.4 6.9 5.5 6.5 5.7 6.3 4.9 6.6 5.2 ...
 $ Sepal.Width : num  3.2 3.2 3.1 2.3 2.8 2.8 3.3 2.4 2.9 2.7 ...
 $ Petal.Length: num  4.7 4.5 4.9 4 4.6 4.5 4.7 3.3 4.6 3.9 ...
 $ Petal.Width : num  1.4 1.5 1.5 1.3 1.5 1.3 1.6 1 1.3 1.4 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 2 2 2 2 2 2 2 2 2 2 ...

尽管我们删除了一个级别的 Species,但它仍然显示了 3 个因子级别。但如果你正在做:

ir <- droplevels(ir)

> str(ir)
'data.frame':   100 obs. of  5 variables:
 $ Sepal.Length: num  7 6.4 6.9 5.5 6.5 5.7 6.3 4.9 6.6 5.2 ...
 $ Sepal.Width : num  3.2 3.2 3.1 2.3 2.8 2.8 3.3 2.4 2.9 2.7 ...
 $ Petal.Length: num  4.7 4.5 4.9 4 4.6 4.5 4.7 3.3 4.6 3.9 ...
 $ Petal.Width : num  1.4 1.5 1.5 1.3 1.5 1.3 1.6 1 1.3 1.4 ...
 $ Species     : Factor w/ 2 levels "versicolor","virginica": 1 1 1 1 1 1 1 1 1 1 ...

您会注意到,现在 Species 有 2 个因子水平而不是 3 个。

它回答了你的问题吗?


推荐阅读