2013-07-11 4 views
2

몇 가지 기준에 따라 열을 선택하는 명령을 알고 싶습니다. 예를 들어, I는 N + 5 열의 데이터 프레임 있다고 가정과 같이 (N은/임의의 알려지지 않은 경우) :데이터 프레임에서 조건을 충족하는 열 집합을 선택하십시오.

>mydf 
Name Meta1 Meta2 ... MetaN A B C D 
Alice a1 a2 ... aN 1 0 1 0 
Bob b1 b2 ... bN 2 1 2 1 

내가 열이 수단 사실을 이용하여 다음의 데이터 프레임을 획득하고자 및 C가 1보다 큰 경우 (또는 B 및 D의 열 수단이 1보다 작은 경우 등).

>mydf 
Name Meta1 Meta2 ... MetaN A C 
Alice a1 a2 ... aN 1 1 
Bob b1 b2 ... bN 2 2 

하위 집합 명령의 "선택"옵션을 논리 연산과 결합하여 사용하려고 시도했지만 colMeans 명령을 사용할 수 없습니다. 이 권리를 얻는 데 가장 가까운 것은 일반적으로 복잡합니다. 나는 이것을 우아하게 할 수 있지만 아직 발견하지 못한 명령을 찾으려고 노력했다.

EDIT : "Meta1"에서 "MetaN"까지의 열 이름은 반드시 자리 표시 자라고 생각해야하며 반드시 실제 열 이름이 아니어야합니다. 그들은 모든 의도와 목적을 위해 임의의 색상 이름을 가질 수 있습니다.

답변

2

확인이 작동합니다

drop <- names(which(colMeans(mydf[-c(1, N+1)])<1)) 
mydf[!(colnames(mydf) %in% drop)] 

이의 좋은 점은 그 데이터 프레임에 우리는 "블루"와 같은 N 임의 색상의 이름으로 대체 "메탄"을 통해 "Meta1"를 한 경우 , "Indigo", ... "겨자"(resp.) 이것은 여전히 ​​효과가 있습니다. 색상의 수 N이 알려지지 않았지만 마지막 하나가 "겨자"라는 것을 알고 있지만, 단지 작은 수정 만 할 필요가 있습니다. 색상을 사용하는 예제에서는 "drop"을 this로 변경하기 만하면

drop <- names(which(colMeans(mydf[-c(1, which(colnames(mydf)=="Mustard")])<1)) 

과 같은 결과가 나타납니다.

3

몇 가지 직접적인 접근법이 있습니다. 여기서 colMeans 함수를 사용할 수 있습니다. 여기서는 data.frame이 "mydf"라고 가정합니다.

> mydf[c("Name", names(which(colMeans(mydf[-1]) > 1)))] 
    Name A C 
1 Alice 1 1 
2 Bob 2 2 
+0

+1 - 주제에 대한 변이 : 'data.frame (mydf [1], mydf [-1] [colMeans (mydf [-1])> 1))' – thelatemail

+0

안녕하세요 아난다, 내 실제 문제에 대한 당신의 대답은 벽에 부딪쳤다. 내 질문을 편집하여 약간 일반화되고 내 문제가 더 잘 반영되도록합니다. –

+0

간단한 변경 ('N'은 사용자의 N 번째 열) mydf [c ("Name", 이름 (colMeans (mydf [-c (1 : N)])>))) ]' – Metrics

관련 문제