2017-06-05 52 views
-1

我的數據集如下所示:如何獲得分類變量的部分級別?

 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。我如何只從變量寄存器中獲取月份規格?

+1

'sapply(strsplit(DF $ register_at, 「\\ S」), 「[」,2))' – emilliman5

+0

是'register_at'真正明確的或者是一個日期?或一個字符串? – G5W

+0

如果輸入'sapply(last.reg_data,class)',你會得到什麼? – G5W

回答

0

您應執行以下步驟:

  1. 設置您的區域設置爲英語(如果你的機器的語言環境已經是英語,你可以跳過這一步!)
  2. 使用as.Date功能格式您的數據(請檢查下面的格式字符串)
  3. 一旦數據是日期格式,只需從日期中提取月份部分。

示例代碼:

#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) 
0

您可以使用substr函數,因爲Month names始終處於相同的位置。

substr(df$register_at, 5, 7) 
+0

它正在工作。我的機器可能有些麻煩。我重新啓動了我的個人電腦和R,它的工作非常完美。 謝謝 –

+0

@ P.Nitu,請將問題標記爲已回答,如果它對您有幫助或至少是UP的話。 – AK47

0

爲了將來的參考,我會嘗試使用更標準化的格式(如年 - 月 - 日小時:分:秒)來寫日期。

但是,我知道我們可能並不總是能夠控制數據的格式(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來恢復到一個因素。

+0

我無法確定沒有數據,但是看起來你可能正在從'factor'到'character'的一個變化是讓所有的東西都變成'NA'? R有時會因爲因素而變得繁瑣。 –