2011-03-17 54 views
4

以下作品中的R數據幀/ SPLUS

myarray <- as.array(list(c(5,5), 9, c(4,2,2,4,6))) 
mydf <- as.data.frame(myarray) 

但在SPLUS細它不---給出錯誤消息:

Problem in data.frameAux.list(x, na.strings = na.st..: arguments imply differing 
number of rows: 2, 1, 5 
Use traceback() to see the call stack 

問:這是怎麼回事?我如何才能在Splus中工作?

編輯:我應該更清楚爲什麼我要經歷這個奇怪的過程,將list視爲data.frame。這是因爲我最終喜歡做這樣的事情在SPLUS如下:

mypos <- timeSeq("1/1/08", "1/3/08", by = "days") 
myts <- timeSeries(data = mydf, positions = mypos) 

最好的可行的選擇,現在,我想,將是建立一個像列表:

mytshack <- list(mypos, as.list(myarray)) 

但這是笨重的,我想獲得timeSeries的功能,如果可能的話

回答

3

編輯後評論。

SPLUS不允許向量作爲在數據幀的價值觀,違背R.你將不得不使用該列表,並且我會簡單地做:

day <- c("1/1/2000","1/2/2000","1/3/2000") 
names(myarray) <- day 

,它允許對數據的訪問通常的方式:

> myarray[["1/1/2000"]] 
[1] 5 5 

鑑於你確認這其實是你想要什麼,並且對數據集的額外信息,試試這個:

myarray <- as.array(list(c(5,5), 9, c(4,2,2,4,6))) 
mydf <- as.matrix(myarray) 
colnames(mydf) <- "myarray" 


mypos <- timeSeq("1/1/08", "1/3/08", by = "days") 
myts <- timeSeries(data = mydf, positions = mypos) 
seriesData(myts) 

這適用於SPlus。 timeSeries需要一個矩形對象,as.rectangular不能處理數組。所以轉換爲矩陣會做。不過,我只是在R中使用包timeSeries,而不是在SPlus中一起使用它。

+0

@Joris:嗯,這是我想要的。我沒有提到的是,'1,2,3'實際上對應於日曆日期,'5,5'對應於兩個事件,每個大小爲5,發生在第1天內。最後,我希望把它變成一個'timeSeries'對象。 – lowndrul 2011-03-17 17:18:26

+0

@brianjd:爲什麼要使用'as.data.frame'而不是'list'? – 2011-03-17 17:26:50

+0

@Joris:我剛剛編輯了我的原始問題,以包括我將'list'作爲'data.frame'對待的背景信息。這是因爲我最終希望從'data.frame'構建一個'timeSeries'對象,並且能夠按日期進行子集的設置。我只能把所有東西(包括日期)放在一個列表中,就像我在編輯中提到的那樣(實際上,現在看起來像是唯一的選項),但訪問與日期相對應的數據的子元素會很笨重並且需要輔助函數。順便說一句,我很欣賞迄今爲止的討論。謝謝! – lowndrul 2011-03-17 17:44:58