2017-03-06 30 views
1

我使用read.csv()命令讀取了一個CSV文件,我想用chartSeries()將其轉換爲xt和圖形。將因素類的yyyymm轉換爲與ChartSeries一起使用的字符類()

我變成一個矩陣做:

MyData <- as.matrix(MyData) 

當我轉換使用到XTS

MyData_xts <- xts(MyData[,-1], order.by=as.POSIXct(MyData[,1])) 

我收到以下錯誤信息:

Error in as.POSIXlt.character(as.character(x), ...) : 
    character string is not in a standard unambiguous format 

列有我的索引是yyyymm格式。我讀過這可能是一個問題,但我一直無法找到解決辦法。

EDIT 1

的CSV讀取之前轉換爲矩陣如下所示。所有的行都是因子類別:

X  |Mkt.RF|SMB 
------|------|--- 
196307|-0.39 |-.046 
196308|5.07 |-0.81 
196308|-1.57 |-.048 
+0

bethanyP,轉換爲矩陣時,所有字段的類都會從因子轉換爲字符。 – Yago

+0

G5W,轉換爲xt時,在數據庫中創建NA。我知道他們不在那裏,因爲即使在使用omit.na()來轉換爲xts之前使用NAs排除所有行。但在轉換爲xts並運行chartSeries()後,出現以下錯誤:na.omit.xts(x)中出現錯誤:不支持的類型 – Yago

+0

請提供CSV文件的示例。 –

回答

0

由於您沒有提供任何數據,我將使用與您的描述相匹配的小測試示例。我不認爲as.POSIXct將沒有特定的日子工作。您可以使用每個月的第一天進行此項工作。

x = c("201701", "201702", "201703") 
xt = as.POSIXct(paste(x, "01", sep=""), format="%Y%m%d") 
xts(xt, order.by=xt) 
       [,1] 
2017-01-01 1483246800 
2017-02-01 1485925200 
2017-03-01 1488344400 

更新時間:
我看到你現在提供的數據說,你得到的NA。我正在使用您提供的數據,將其作爲csv讀取,並使用我的代碼進行處理,而不是獲取NA。請再看看這個版本的代碼。

Input = read.csv(text="X,Mkt.RF,SMB 
196307,-0.39 ,-.046 
196308,5.07 ,-0.81 
196308,-1.57 ,-.048", 
header=TRUE, stringsAsFactors=FALSE) 

library(xts) 
Input$xt = as.POSIXct(paste(Input$X, "01", sep=""), format="%Y%m%d") 
xts(Input, order.by=Input$xt) 
      X  Mkt.RF SMB  xt   
1963-07-01 "196307" "-0.39" "-0.046" "1963-07-01" 
1963-08-01 "196308" " 5.07" "-0.810" "1963-08-01" 
1963-08-01 "196308" "-1.57" "-0.048" "1963-08-01" 
+0

G5W感謝您的回覆。我查看了您提交的代碼,並在運行xts()後仍然獲得了NAs。我能夠生成索引好,但是當運行xts()然後periodicity()我得到以下錯誤消息:無法計算1觀察的週期性 – Yago

3

您應該使用read.zoo將CSV直接導入動物園對象。如果需要,可以使用as.xts將動物園對象轉換爲xts。您還應該使用yearmon索引,因爲您的索引只有數年和數月。

Text <- "X,Mkt.RF,SMB 
196307,-0.39,-0.046 
196308, 5.07,-0.810 
196309,-1.57,-0.048" 

# function adapted from examples in ?read.zoo 
z <- read.zoo(text=Text, header=TRUE, sep=",", 
       FUN=function(x) as.yearmon(format(x), "%Y%m")) 
z 
#   Mkt.RF SMB 
# Jul 1963 -0.39 -0.046 
# Aug 1963 5.07 -0.810 
# Sep 1963 -1.57 -0.048 
+0

我是新來的R.我不完全理解你提供的代碼,特別是爲什麼x/100在as.yearmon()中。我收到以下錯誤消息:x/100中的錯誤:二元運算符的非數字參數 – Yago

+0

@Yago:該部分不是必需的,我已將其編輯出我的答案。您可能得到了該錯誤,因爲CSV中有第一列不能被解釋爲數字的行。如果是這樣,您需要仔細查看CSV中的數據以確定如何處理這些行。 –

+0

約書亞,你是對的。我在原始CSV文件的某一行中遇到了數據問題。代碼現在可用。感謝您的幫助 – Yago