簡體   English   中英

使用 R 中的標簽將數字轉換為因子

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM