2014-10-30 100 views
0

我是R新手,遇到了一個奇怪的錯誤。我有這樣的桌子:下標超出範圍錯誤R

dat<-c(1,2,3,4,4,53,62,345,3,4,346,23,34,52,34,2345,23,4) 
dat.table<-table(dat) 

這創建了一個表,我想從該表中獲得一個特定的列。當我嘗試dat.table[[3]]它給了我2向量中真正出現3。但是,當我嘗試dat.table[[2345]],雖然2345是目前在rownames(dat.table),它提供了以下錯誤:

Error in b[[2345]] : subscript out of bounds 

這可能是一個基本的問題,但它的奇怪爲什麼[R表現不同爲不同rownames! 我感謝任何幫助。

回答

1

偶然的機會, 「3」 的發生存儲在dat.table的第3列中。

讓我們嘗試用這個例子中(2個零添加):

dat <- c(0,1,2,3,4,4,53,62,345,3,4,346,23,34,0,52,34,2345,23,4) 
dat.table[[3]] 
[1] 1 

哎呀,錯誤值。現在,讓我們嘗試用

dat.table[["3"]] 
[1] 2 

正確

「2345」 是一個字符,列的名稱。當您鍵入dat.table[[2345]]時,您嘗試訪問不存在的第2345個元素。您需要指定列的名稱

dat <- c(1,2,3,4,4,53,62,345,3,4,346,23,34,52,34,2345,23,4) 
dat.table <- table(dat) 
dat.table[["2345"]] 
[1] 1 
1

對於訪問dat.table項目:

dat.table['2345'] 
2345 
    1 

dat.table不是data.frame。嘗試以下:

ddf = data.frame(dat.table) 
ddf 
    dat Freq 
1  1 1 
2  2 1 
3  3 2 
4  4 4 
5 23 2 
6 34 2 
7 52 1 
8 53 1 
9 62 1 
10 345 1 
11 346 1 
12 2345 1 

ddf[12,] 
    dat Freq 
12 2345 1 

ddf[12,2] 
[1] 1 

DDF [[I]]給出列號i:

ddf[[1]] 
[1] 1 2 3 4 23 34 52 53 62 345 346 2345 
Levels: 1 2 3 4 23 34 52 53 62 345 346 2345 

ddf[[2]] 
[1] 1 1 2 4 2 2 1 1 1 1 1 1 

對於寬data.frame:

tt = data.frame(t(ddf)) 

tt 
    X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 
dat 1 2 3 4 23 34 52 53 62 345 346 2345 
Freq 1 1 2 4 2 2 1 1 1 1 1 1