将strptime应用于本地数据框架

时间:2015-12-30 09:41:17

标签: r string date escaping

我认为我遇到了与\无关的问题。

以下是我使用read_csv阅读的data.frame的DateTime列的摘录:

earthquakes[1:20,1]
Source: local data frame [20 x 1]
                 DateTime
                    (chr)
1  1964/01/01 12:21:55.40
2  1964/01/01 14:16:27.60
3  1964/01/01 14:18:53.90
4  1964/01/01 15:49:47.90
5  1964/01/01 17:26:43.50

我的目标是在这里抽出岁月。 Manully做

> format(strptime(c("1964/01/01 12:21:55.40","1964/01/01 12:21:55.40","1964/01/01 14:16:27.60"), "%Y/%m/%d %H:%M:%OS"), "%Y")
[1] "1964" "1964" "1964"

按预期工作。但是,

> strptime(earthquakes[1:5,1], "%Y/%m/%d %H:%M:%OS")
DateTime 
      NA 

我的预感是问题与

有关
as.character(earthquakes[1:5,1])
[1] "c(\"1964/01/01 12:21:55.40\", \"1964/01/01 14:16:27.60\", \"1964/01/01 14:18:53.90\", \"1964/01/01 15:49:47.90\", \"1964/01/01 17:26:43.50\")"

所以,数据框中的列也包含“通过转义\"。但我不知道如何从这里处理这个。

鉴于这些年份是前四个条目,它似乎也可以(但不那么优雅,imho)

substr(earthquakes[1:5,1],1,4)

然后相应地给出了

[1] "c(\"1"

显然,我可以做到

substr(earthquakes[1:5,1],4,7)

但这只适用于第一行。

1 个答案:

答案 0 :(得分:3)

显然你有dplyr::tbl_df,默认情况下,[从不将单个列简化为原子向量(与应用于基础R的[相比data.frame })。因此,您可以使用[[$来提取列,然后将其简化为原子向量。

一些例子:

data(iris)
library(dplyr)
x <- tbl_df(iris)
x[1:5, 1]
#Source: local data frame [5 x 1]
#
#  Sepal.Length
#         (dbl)
#1          5.1
#2          4.9
#3          4.7
#4          4.6
#5          5.0
iris[1:5, 1]
#[1] 5.1 4.9 4.7 4.6 5.0
x[[1]][1:5]
#[1] 5.1 4.9 4.7 4.6 5.0
x$Sepal.Length[1:5]
#[1] 5.1 4.9 4.7 4.6 5.0