Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 删除R中不是日期的字符_Regex_R - Fatal编程技术网

Regex 删除R中不是日期的字符

Regex 删除R中不是日期的字符,regex,r,Regex,R,我有一些数据框,df带有一列,日期格式如下: pv$day 01/01/13 00:00:00 03/01/13 00:02:03 04/03/13 00:10:15 .... 我想去掉时间戳,只留下日期(例如,第一行为01/01/13)。我尝试了使用sapply()来应用strsplit()函数,并尝试使用正则表达式过滤内容,但在这两种情况下似乎都没有完全正确。这: sapply(pv$day, function(x) strsplit(toString(

我有一些数据框,df带有一列,日期格式如下:

    pv$day
    01/01/13 00:00:00
    03/01/13 00:02:03
    04/03/13 00:10:15

....
我想去掉时间戳,只留下日期(例如,第一行为
01/01/13
)。我尝试了使用
sapply()
来应用
strsplit()
函数,并尝试使用正则表达式过滤内容,但在这两种情况下似乎都没有完全正确。这:

 sapply(pv$day, function(x) strsplit(toString(x), ' '))
为我提供具有正确拆分的列,但是使用
[1]
[[1]]
进行索引不会返回拆分的第一个元素


最好的方法是什么?

您可以使用
sub

vec <- c("01/01/13 00:00:00", "03/01/13 00:02:03", "04/03/13 00:10:15")

sub(" .+", "", vec)
# [1] "01/01/13" "03/01/13" "04/03/13"

vec您可以使用
sub

vec <- c("01/01/13 00:00:00", "03/01/13 00:02:03", "04/03/13 00:10:15")

sub(" .+", "", vec)
# [1] "01/01/13" "03/01/13" "04/03/13"

vec一个简单灵活的解决方案是使用strtime和strftime。下面是一个使用上述示例中的日期的示例:

# Your dates
t <- c("01/01/13 00:00:00","03/01/13 00:02:03", "04/03/13 00:10:15")

# Convert character strings to dates
z <- strptime(t, "%d/%m/%y %H:%M:%OS")

# Convert dates to string, omitting the time
z.date <- strftime(z,"%d/%m/%y")

# Print the first date
z.date[1]
#你的约会

t一个简单灵活的解决方案是使用strptime和strftime。下面是一个使用上述示例中的日期的示例:

# Your dates
t <- c("01/01/13 00:00:00","03/01/13 00:02:03", "04/03/13 00:10:15")

# Convert character strings to dates
z <- strptime(t, "%d/%m/%y %H:%M:%OS")

# Convert dates to string, omitting the time
z.date <- strftime(z,"%d/%m/%y")

# Print the first date
z.date[1]
#你的约会

t这里有一个很好的使用
sapply
的方法,它使用
strsplit
在空格处拆分

> d <- c("01/01/13 00:00:00", "03/01/13 00:02:03", "04/03/13 00:10:15")
> sapply(strsplit(d, " "), `[`, 1)
# [1] "01/01/13" "03/01/13" "04/03/13"

这里有一个很好的使用
sapply
的方法,它使用
strsplit
在空间上拆分

> d <- c("01/01/13 00:00:00", "03/01/13 00:02:03", "04/03/13 00:10:15")
> sapply(strsplit(d, " "), `[`, 1)
# [1] "01/01/13" "03/01/13" "04/03/13"

下面是一种使用环视断言的方法:

vec <- c("01/01/13 00:00:00", "03/01/13 00:02:03", "04/03/13 00:10:15")
gsub(pattern = "(?=00).*$", replacement =  "", vec, perl = TRUE)
[1] "01/01/13 " "03/01/13 " "04/03/13 "

vec以下是一种使用环视断言的方法:

vec <- c("01/01/13 00:00:00", "03/01/13 00:02:03", "04/03/13 00:10:15")
gsub(pattern = "(?=00).*$", replacement =  "", vec, perl = TRUE)
[1] "01/01/13 " "03/01/13 " "04/03/13 "

vec这似乎得到了预期的格式
格式(如.Date(d,format=“%d/%m/%y”),%d/%m/%y”)#[1]“01/01/13”“03/01/13”“04/03/13”
这似乎得到了预期的格式
格式(如.Date(d,format=“%d/%m/%y”),%d/%m/%y”)#[1]“01/01/13”“03/13”