[英]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"))
編輯以下評論。
如果要從字符串中提取時間,最好的解決方案是改用strftime
和strptime
。 這樣,您還可以將時間格式設置為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.