2014-10-30 188 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