2013-09-23 87 views
1

我試圖在R中獲得我的數據的子集。我試過這個,但是我得到了意想不到的結果!使用rownames在R中嵌入數據

>str(data) 
num [1:500, 1:2000] 5.65 
>y<-c("rowname1" , "rowname2", ...) 
> spotA<-data[y] 

NULL 
> spotA 
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 

我也試過如下方法:

>spotA<-data[c("rowname1" , "rowname2", ...)] 

,我得到了上述結果。我期望的是得到sotA與維數16 2000數字條目,而不是NA!有人能幫助我,我的錯誤在哪裏?

+3

請閱讀[關於如何創建一個偉大的重複的例子,常見問題解答(http://stackoverflow.com/a/5963610/1412059)。 – Roland

+0

看起來您正在使用'data.table'語法(在'i'參數後面不需要逗號),並且可能會將其與'data.frame'語法混淆(需要'i'後的逗號) –

+2

@ RicardoSaporta但是'數據'似乎是一個矩陣...... – Roland

回答

1

試試這個:

data<-as.data.frame(matrix(runif(20),nrow=10,ncol=2)); 
y<-paste("row",row.names(data),sep=".") 
row.names(data)<-y 
data; 
      V1   V2 
row.1 0.3108385 0.09000282 
row.2 0.3254967 0.44500053 
row.3 0.3993356 0.71400316 
row.4 0.2039391 0.11712378 
row.5 0.4105687 0.70830021 
row.6 0.5245575 0.36039628 
row.7 0.2277783 0.71712201 
row.8 0.6282813 0.33950400 
row.9 0.1005018 0.94331287 
row.10 0.3843297 0.58610738 

data[row.names(data)%in%y[c(2,4,5,8,9)],] 
      V1  V2 
row.2 0.3254967 0.4450005 
row.4 0.2039391 0.1171238 
row.5 0.4105687 0.7083002 
row.8 0.6282813 0.3395040 
row.9 0.1005018 0.9433129 
+0

呵呵;我從來不知道'rownames'有一個'row.names'替代。無論如何,OP是正確的,你也可以寫'data [c('row.1','row.8'),]',對嗎?另外,你可以保留OP的數據結構(作爲一個矩陣而不是data.frame)... – Frank