我有一個資料集,我試圖根據類別過濾獲取資料子集。
df_clean = filter(df_clean, City %in% c("Chicago","312CHICAGO", "CCHICAGO", "CHCHICAGO",
"CHCICAGO","chicago", "Chicago", "CHicago", "CHICAGO",
"CHICAGOC","CHICAGOCHICAGO", "CHICAGOI",
"CHICAGOO", "312CHICAGO" ))
城市是具有許多不同級別(城市)的分類變數,我想過濾它只顯示芝加哥(以及在資料集中發現的相關拼寫錯誤。過濾器選項似乎不起作用,因為當我在過濾后檢查級別時讓我回到與應用過濾器之前相同的水平。不知道我做錯了什么。
我還嘗試過濾另一個列/分類變數風險,這也不起作用。風險有以下幾個級別。
風險 1(高)、風險 2(中)、風險 3(低)、ALL、空
我不得不求助于使用 droplevels(df_Clean$Risk) ,但我不知道為什么。
df_clean = df_clean [df_clean $Risk %in% c("Risk 1 (High)", "Risk 2 (Medium)", "Risk 3 (Low)"),]
顯然,在過濾方面我很困惑,我做錯了什么?
uj5u.com熱心網友回復:
當一列被定義為一個因子時,它實際上是一個指向字串字典的整數索引值。僅僅因為您從列中過濾掉了一個因素,資料框仍然將該值(和索引)保留在列的字典中,以防將來添加回來。
因此,為了洗掉未使用的級別,需要使用該droplevels()功能洗掉已使用的級別并重新分配剩余的級別。
也許這段代碼將演示:
demo <- data.frame(id=c(1, 2, 3), animal=c("dog", "cat", "pig"), stringsAsFactors = TRUE)
str(demo)
#1=cat, 2=dog, 3=pig
# factors are sorted in alphabetical order
as.integer(demo$animal)
#remove one factor
reduced <- demo[demo$animal != "cat",]
reduced
as.integer(reduced$animal)
#still 1=cat, 2=dog, 3=pig
#drop level
reduced$animal<- droplevels(reduced$animal)
as.integer(reduced$animal)
#Now 1=dog, 2=pig
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/522759.html
標籤:rdplyr
