2012-02-07 2 views

답변

10

이 작업을 수행 할 수 있습니다

mydf[,"firstcol"] 

는 열 번째,하지 첫째가는 것을 기억하십시오. 그래서 정말 mydf[mydf$firstcol,] 그래서

> mydf[c(1,2,1),] 
    firstcol secondcol 
1   1   3 
2   2   4 
1.1  1   3 

당신이 행 1을 요구하고, 2와 동일

> mydf$firstcol 
[1] 1 2 1 

을 : 당신의 예에서

는 현실을 파괴하자, mydf[mydf$firstcol,] 당신을주는 것을 볼 수 있습니다 즉, 1 행이 mydf의 행 1과 같고 2 행이 mydf의 행 2와 같고 행 3이 mydf의 행 1과 동일하도록 요청하는 것입니다. 두 컬럼 모두를 요구하고 있습니다.

또 다른 질문은 다음이 작동하지 않는 이유입니다 :

당신이 그런 식으로 요청할 때 그러나 당신이 mydf$firstcol을 할 때 열 이름 주위에 따옴표를 넣어해야 할 이유
> mydf[,firstcol] 
Error in `[.data.frame`(mydf, , firstcol) : object 'firstcol' not found 

. 대답은 사용하는 연산자가 다른 유형의 인수를 요구한다는 것입니다. '$'에서 x $ name 형식을 볼 수 있습니다. 따라서 두 번째 인수는 따옴표로 묶지 않은 이름이 될 수 있습니다. 그러면 실제로는 동일한 도움말 페이지로 연결되는 ?'['을 찾을 수 있습니다. 그리고 거기에서 당신은 다음을 발견 할 것이고 그것을 설명 할 것입니다. 는 "문자"벡터 인용 항목이 필요합니다 (즉, 당신이 R (그리고 다른 많은 언어)에서 문자 벡터를 입력하는 방법입니다.

i, j, ...: indices specifying elements to extract or replace. Indices 
     are ‘numeric’ or ‘character’ vectors or empty (missing) or 
     ‘NULL’. Numeric values are coerced to integer as by 
     ‘as.integer’ (and hence truncated towards zero). Character 
     vectors will be matched to the ‘names’ of the object (or for 
     matrices/arrays, the ‘dimnames’): see ‘Character indices’ 
     below for further details. 
+0

대단히 감사합니다! – speendo

2

아무것도 쑤 왕 유.의 아주 명확한 설명을 추가하지 않으려면 data.table 패키지를 사용하면 mydf[firstcol==1,] 또는 mydf[,firstcol]과 같은 표기법을 사용할 수 있으며, 많은 사람들이 더 자연 스럽다는 것을 알 수 있습니다.

관련 문제