2013-09-23 3 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", ...)] 

나는 위의 결과를 얻었다. 내가 예상하는 것은 NA가 아닌 숫자 항목이있는 차원 16 2000의 sotA를 얻는 것입니다! 누군가 내 실수를 어디에서 도울 수 있습니까?

+3

는 [위대한 재현 예제를 만드는 방법에 대한 FAQ]를 읽어 보시기 바랍니다 (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

관련 문제