2012-05-11 2 views
1

열 이름이 z_1, z_2까지 z_200 인 데이터 프레임이 있습니다. 다음 예에서, 표현의 편의를 위해, I는 상기 데이터 프레임데이터 프레임의 열 이름에 액세스

동안 제거 될 필요가 특정 요소를 액세스하기위한 루프 I에서 사용될 만 z_1

df <- data.frame(x=1:5, y=2:6, z_1=3:7, u=4:8) 
df 
i=1 
tmp <- paste("z",i,sep="_") 
subset(df, select=-c(tmp)) 

위의 코드를 도시하고 위의 코드를 실행, 나는 "-c (TMP) 오류 : 단항 연산자에 잘못된 인수"오류를 얻을

여러분의 도움에 감사드립니다을

+0

도 참조 답변 : [드롭 열 R 데이터 프레임 (http://stackoverflow.com/questions/4605206/drop-columns -r-data-frame) –

답변

1

시도 :

df[names(df)!=tmp] 

코드가 작동하지 않는 이유는 tmp이 문자 인 -c(tmp)이 아무 것도 평가하지 않기 때문입니다. 숫자 값으로 만 제외하는 이러한 방법을 사용할 수 있습니다.

는 다른 방법이 또한 작동합니다 :

subset(df, select=-which(names(df)==tmp)) 

which 때문에 반환 번호를.

1

하위 집합을 사용하고 포함하거나 제외 할 비슷한 이름의 열이 많으면 일반적으로 grepl을 사용하여 열 이름과 일치하는 논리 벡터를 구성하는 방법을 고려합니다. 수치 벡터와 마찬가지로 쉽게). 결과의 부정은 열이 제거 할 수 있습니다 (또는 포함하지 않고) 모든 열이 그 패턴을 사용하여 "Z"로 시작하는 부정으로

df <- data.frame(x=1:5, y=2:6, z_1=3:7, u=4:8) 
df 
i=1 
tmp <- paste("z",i,sep="_") 
subset(df, select= !grepl("^z", names(df))) 
    x y u 
1 1 2 4 
2 2 3 5 
3 3 4 6 
4 4 5 7 
5 5 6 8 

을 제거하는 것입니다. 또는 당신은 문자 값과 함께 value =TRUEgrep을 사용할 수 있습니다 :이 질문에

subset(df, select= c("x", grep("^z", names(df), value=TRUE))) 
관련 문제