2012-12-02 95 views
0

上半年我有一個例子數據框:總結列

a <- c("08/11/2012 15:45","08/11/2012 15:51", 
     "09/11/2012 09:02","10/11/2012 15:45", 
     "14/11/2012 15:45") 
b <- c(1:5) 
df1 <- data.frame(a,b) 

我想用一個總結式函數來通知我,我有我的DF1其獨特的日期。有沒有使用僅查看列的一部分的函數的方法? (即日期不是時間)。例如,使用上面的例子中,R將報告:

08/11/2012 
09/11/2012 
10/11/2012 
14/11/2012 

回答

1

我upvoted羅蘭的答案,因爲它給了你,你要求什麼,但我不知道它給你什麼是需要最有效地使用R的設施。您應該將日期時間輸入轉換爲日期時間對象,然後從中提取您需要的內容。您還應該學習使用YYYY-MM-DD格式的日期,因爲它們對您,您的客戶以及您可能採用的任何整理功能的含義較少。

?strptime # for input of datetime variable 
?strftime # for formatting output of datetime variables 
a <- c("08/11/2012 15:45","08/11/2012 15:51", 
     "09/11/2012 09:02","10/11/2012 15:45", 
     "14/11/2012 15:45") 
b <- c(1:5) 
df1 <- data.frame(a=strptime(a, format="%d/%m/%Y %H:%M") ,b) 
unique(strftime(df1$a, format="%d/%m/%Y")) 
#[1] "08/11/2012" "09/11/2012" "10/11/2012" "14/11/2012" 

在回答有關如何通過獨特的日期分裂的問題,我想創建一個列表與分割功能:

spl.dfrm <- split(df1, strftime(df1$a, format="%d/%m/%Y")) 

您可以訪問indivdial數據框元素或者通過NUMER或名稱。名稱將是格式操作的字符值,因此第一個將是:

spl.dfrm[["08/11/2012"]] 
+0

非常感謝@DWin的建議。我現在已經完成了這個工作,並希望通過這些獨特的日期來對我的原始數據框進行子集化(即我的文件現在分爲四部分)。我試過df2 < - subset(df1,a ==「2012-11-08」) - 但這不起作用。我哪裏錯了? –

+0

非常感謝@DWin的完美。如果我有原始數據框(Df1),並且我想擺脫某些時間之後的行(即11/11/2012 15:47),那麼我該怎麼做?我希望刪除數據幀的最後一個值(留下前4個觀察值)。 –

+0

可以用日期時間對象進行數值比較,所以要麼說'df1 [df1 $ a1

0

使用正則表達式。在您的例子中,你可以做

unique(sub('^(../../....).*', '\\1', df1$a)) 
2

轉換爲日期變量:

unique(as.Date(df1$a,"%d/%m/%Y")) 
#[1] "2012-11-08" "2012-11-09" "2012-11-10" "2012-11-14" 

format(unique(as.Date(df1$a,"%d/%m/%Y")),"%d/%m/%Y") 
#[1] "08/11/2012" "09/11/2012" "10/11/2012" "14/11/2012"