我的數據集如下所示:如何獲得分類變量的部分級別?
dsn register_at
1 AC000W000014612 Thu Mar 02 21:34:30 UTC 2017
2 AC000W000016124 Tue Mar 14 19:40:57 UTC 2017
3 AC000W000016219 Tue Apr 14 19:29:10 UTC 2017
我需要得到就像三月,四月等一個月規範每個DSN。我如何只從變量寄存器中獲取月份規格?
我的數據集如下所示:如何獲得分類變量的部分級別?
dsn register_at
1 AC000W000014612 Thu Mar 02 21:34:30 UTC 2017
2 AC000W000016124 Tue Mar 14 19:40:57 UTC 2017
3 AC000W000016219 Tue Apr 14 19:29:10 UTC 2017
我需要得到就像三月,四月等一個月規範每個DSN。我如何只從變量寄存器中獲取月份規格?
您應執行以下步驟:
示例代碼:
#Create the data frame
mdata <- data.frame(dsn=character(0), register_at=character(0))
mdata <- edit(mdata)
#Set the locale to en_US (This is required, because month/date names are in english)
Sys.setlocale(category = "LC_TIME", locale="English_US.1252")
Sys.getlocale()
#Convert the variable to date
mdata$register_at_date <- as.Date(mdata$register_at,format="%a %b %d %H:%M:%S UTC %Y")
#Extract the month part
mdata$month <- months(mdata$register_at_date)
#Print out the data frame
print(mdata)
您可以使用substr
函數,因爲Month names
始終處於相同的位置。
substr(df$register_at, 5, 7)
它正在工作。我的機器可能有些麻煩。我重新啓動了我的個人電腦和R,它的工作非常完美。 謝謝 –
@ P.Nitu,請將問題標記爲已回答,如果它對您有幫助或至少是UP的話。 – AK47
爲了將來的參考,我會嘗試使用更標準化的格式(如年 - 月 - 日小時:分:秒)來寫日期。
但是,我知道我們可能並不總是能夠控制數據的格式(boo)。我想我會提到的是,如果它是更標準化的格式,lubridate
包有一個功能,稱爲floor_date
,可以很容易地完成這一點。
對於這個特定的情況下,你可以只用空格分割字符串和拆分後只選擇第二個元素:
> # create data frame
> # note that, per your question, dsn and register_at are factors
> d <- data.frame(dsn=factor(c("AC000W000014612", "AC000W000016124", "AC000W000016219")),
+ register_at=factor(c("Thu Mar 02 21:34:30 UTC 2017", "Tue Mar 14 19:40:57 UTC 2017", "Tue Apr 14 19:29:10 UTC 2017")))
>
> library(stringr) # load package
> d$register_month <- str_split_fixed(as.character(d$register_at), " ", 3)[,2] # convert to character, split at a space, take the second element
> d
dsn register_at register_month
1 AC000W000014612 Thu Mar 02 21:34:30 UTC 2017 Mar
2 AC000W000016124 Tue Mar 14 19:40:57 UTC 2017 Mar
3 AC000W000016219 Tue Apr 14 19:29:10 UTC 2017 Apr
注意register_month
將是一個character
矢量,所以如果你想它作爲一個因素,你也必須使用as.factor
來恢復到一個因素。
我無法確定沒有數據,但是看起來你可能正在從'factor'到'character'的一個變化是讓所有的東西都變成'NA'? R有時會因爲因素而變得繁瑣。 –
'sapply(strsplit(DF $ register_at, 「\\ S」), 「[」,2))' – emilliman5
是'register_at'真正明確的或者是一個日期?或一個字符串? – G5W
如果輸入'sapply(last.reg_data,class)',你會得到什麼? – G5W