0

I have an example dataframe:

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)

I want to use a summary-type function to inform me which unique dates I have in my df1. Is there a way of using a function that only looks at a part of a column? (i.e. the date not the time). For example, using the example above, R would report:

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

3 回答 3

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"
于 2012-12-02T18:14:13.210 回答
1

我赞成 Roland 的回答,因为它给了你所要求的东西,但我不确定它是否能给你最有效地使用 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") )

您可以按数字或按名称访问单个数据框元素。名称将是格式化操作的字符值,所以第一个是:

spl.dfrm[["08/11/2012"]]
于 2012-12-02T18:56:07.927 回答
0

使用正则表达式。在您的示例中,您可以执行

unique(sub('^(../../....).*', '\\1', df1$a))
于 2012-12-02T18:13:48.733 回答