簡體   English   中英

為什么因子水平在R中不按順序排列?

[英]Why factor levels are not in order in R?

我有一個列,它的時間在0:00到23:00之間,我試圖將其分解,但是正在發生一些奇怪的事情。 我將在下面的代碼中顯示。

//first I get the set of values from 0:00 to 23:00 

pain <- head(train_data$time, 24)

//then I run the factor function:
fpain <- factor(pain, levels = 0:23)

它返回:

     [1] <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>

    Levels: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

如果我未指定級別運行:

  fpain <- factor(pain)

我得到以下信息:

  [1] 0:00  1:00  2:00  3:00  4:00  5:00  6:00  7:00  8:00  9:00  10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 20:00 

  [22] 21:00 22:00 23:00
 24 Levels: 0:00 1:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 2:00 20:00 21:00 22:00 23:00 3:00 4:00 ... 9:00

級別如何直接從0:00、1:00到10:00? 當我指定級別時,為什么會以NA的形式出現?

這是日期時間數據,我該如何使用它們? 日期時間是每小時計數。

您假設因素是數字,而不是數字。

當您這樣做時:

fpain <- factor(pain, levels = 0:23)

您正在指定因子順序(0, 1, 2, 3, ...)但是您的值不是0, 1, 2, ...而是0:00, 1:00, 2:00, ... ,因此R返回NA ,因為它無法將值匹配到您指定的級別。

當你做

 fpain <- factor(pain)

R正確創建0:00, 1:00, ...級別0:00, 1:00, ...並按字母順序對其進行排序 ,因此您的因子確實已排序。

如果要強加非字母順序,則應使用

 fpain <- factor(pain, levels=paste0(0:23, ":00"))

編輯以下評論。

如果要從字符串中提取時間,最好的解決方案是改用strftimestrptime 這樣,您還可以將時間格式設置為hh:mm(即前導0),從而無需重新排序級別。

例如:

str.to.time <- strptime("9/1/2012 10:00", "%d/%m/%Y %H:%M")

此POSIX對象的結果:

"2012-01-09 10:00:00 GMT"

然后您可以使用

strftime(str.to.time, "%H:%M")
[1] "10:00"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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