我有一个示例数据框:
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
答案 0 :(得分: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"
答案 1 :(得分: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"]]
答案 2 :(得分:0)
使用正则表达式。在您的示例中,您可以执行
unique(sub('^(../../....).*', '\\1', df1$a))