[英]Convert Number to Factor using Labels in R
我的數據集中有一列,其中包含各種不同的數值。 但是,其中 3 個數字具有特定的 label,而所有其他數字具有通用 label。 逐個瀏覽數據集不是一種選擇。 這是一個非常大的數據集,包含 167K obs。
下面顯示了列中的所有唯一值:
> unique(NYC_2019_Arrests$JURISDICTION_CODE)
Levels: 0 1 2 3 4 6 7 9 11 12 13 14 15 16 69 71 72 73 74 76 79 85 87 88 97
JURISDICTION_CODE
的級別定義如下:
JURISDICTION_CODE - 負責逮捕的司法管轄區。 轄區代碼 0(巡邏)、1(交通)和 2(住房)代表紐約警察局,而代碼 3 和更多代表非紐約警察局轄區。
這是我試圖讓它工作但只返回一個錯誤的代碼:
> NYC_2019_Arrests$JURISDICTION_CODE <- factor(NYC_2019_Arrests$JURISDICTION_CODE, levels = c(0,1,2, 3:100), labels = c("Patrol", "Transit", "Housing", "Non-NYPD Jurisdiction"))
Error in factor(NYC_2019_Arrests$JURISDICTION_CODE, levels = c(0, 1, 2, :
invalid 'labels'; length 4 should be 1 or 101
我還通過取出 3:100 並留在 label 中嘗試了上述代碼,但這也不起作用。
如果這里有人知道如何使所有 3 及以上的值都具有通用性,而不必單獨輸入所有數字,將不勝感激。
謝謝!
錯誤消息提供了一些方向。 問題是標簽向量的長度為 4,但您的級別長度為 101。我認為您幾乎可以使用原始代碼。 只需使用以下命令將標簽設置為正確的長度:
reps<-rep("Non-NYPD Jurisdiction",98)
NYC_2019_Arrests$JURISDICTION_CODE <- factor(NYC_2019_Arrests$JURISDICTION_CODE, levels = c(0,1,2, 3:100), labels = c("Patrol", "Transit", "Housing", reps))
編輯說明:
運行此代碼以獲取更多說明。
#The key is that labels needs the same vector length as level
#length of levels
levels <- c(0,1,2, 3:100)
print(length(levels))
#length of original levels
labels = c("Patrol", "Transit", "Housing", "Non-NYPD Jurisdiction")
print(length(labels))
#This is problematic because what happens for when level - 4. labels[4] would be null.
#Therefore need to repeat "Non-NYPD Jurisdiction" for each level
#since length(3:100) is 98 that is how we know we need 98
reps<-rep("Non-NYPD Jurisdiction",98)
labels <- c("Patrol", "Transit", "Housing", reps)
print(length(labels))
有幾種方法可以解決這個問題。 我能想到的最簡單和最好的方法是從dplyr
case_when
是一個例子:
library(dplyr)
case_when(mtcars$carb == 1 ~ "One",
mtcars$carb == 2 ~ "Two",
mtcars$carb >= 3 ~ "Three or More")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.