2015-12-30 57 views
1

我認爲我有一個與\有關的問題,我無法處理。將strptime應用到本地數據幀

這裏是我與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 doing

> 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\")" 

所以,在數據幀中的列不還通過退出\"包含了「,但我不知道如何從這裏處理這個問題。

鑑於年是前四個條目,這也似乎OK(但不太優雅,恕我直言)做

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

但然後相應地只是給

[1] "c(\"1" 

顯然,我所能做的

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

但只在第一行工作。

回答

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 
+0

驚人的你如何發現問題,即使沒有我張貼MWE!這就解釋了爲什麼它在某個時候已經工作了,但之後不再工作 - 我在後面的過程中只需要'dplyr'(我太尷尬過了,覺得代碼應該有時候不再工作,而且不太可能)。 –

+1

@你可以保留你的數據,只需用'strptime(地震[1:5,1],'%Y /%m /%d%H:%M:%OS' [1]] [1:5],「%Y /%m /%d%H:%M:%OS」)' –