2014-05-13 1 views
0

R 환경에 다소 익숙합니다. "test"문자 집합이 있습니다. 샘플 데이터 (숫자)에서 해당 열의 모든 해당 값을 필터링하려면 열 이름을 일치 시켜서 수행 할 수 있습니다. AA의 값과 함께, 나는 또한 필터링 할 수
, 그것이 가능R (비슷한) 행 이름과 유사한 값을 필터링하는 방법은 무엇입니까

> test <-c("aa", "bb", "zz") 

> head(sample.data) 

aa aa-001 aa-099 cc zz 

1 5  6  7 2 

> temp<-test%in% names(sample.data) 

이 나에게 내가 데이터

그러나
>temp 

TRUE FALSE FLASE FLASE TRUE 

> req.vec <- sample.data[temp] 


> req.vec 


aa zz 


1 2 

을 필요로하는데 사용할 수있는 논리적 인 벡터를 제공입니다 예를 들어, aa-001과 aa-099의 해당 값도 마찬가지입니까? 데이터가 AA에 대한 변화의 100 단위 근래 때문에 나는 그들이 COLNAMES 항상 지정된 형식의 경우, BB ZZ 등

+0

샘플 데이터의 결과를 어떻게 변경 하시겠습니까? "aa"로 시작하는 모든 열을 유지하고 싶다고 말하는 것입니까? – MrFlick

+0

안녕하세요, 저는 동일한 초기 이름을 가진 모든 열의 값을 포함하는 데이터 세트를 생성하려고합니다. 사실, 마지막 네 문자 만 다른 열 이름에 대해 변경됩니다. 예. 열 이름이 aa-001 aa-005 bbb-001 bbb-090 acdb-001 acdb-007 등인 경우 "aa"및 "acdb"등이 포함 된 값에 관심이 있습니다. –

답변

0

, 당신은 당신이 또는

test <-c("aa", "bb", "zz") 
cn <- c("aa", "aa-001", "aa-099", "cc", "zz") 
sample.data <- c(1,5,6,7,2) 
names(sample.data) <- cn 
sample.data[substr(cn, 1, 2) %in% test] 
## aa aa-001 aa-099  zz 
##  1  5  6  2 

을 할 수 있었다 "AA"의 모든 변종 일치하지 않을 수 있습니다 grep 이상 test

+0

감사합니다! 그래도 조금 수정해야합니다. 내 문제에 따라 마지막 4 자만 바뀌 었습니다. 그래서 sample.data [% test에서 substr (cn, 1, 2) %]를 사용하는 대신 을 사용했습니다. % test ] –

0

이 예제에서는 test 벡터의 문자로 시작하는 열 이름을 일치 시키려면 grep을 사용합니다. 당신은 단지 마지막 4 개 문자가 변화하고 있음을 언급 때문에

test <- c("aa", "bb", "zz") 
sample.data <- data.frame(aa=1, "aa-001"=5, "aa-099"=6,cc=7,zz=2) 
cols <- apply(sapply(test, function(x) grepl(paste0("^",x),names(sample.data))),1,any) 
sample.data[, cols] 

은, 그것은 마지막 4 개 문자를 제거하는 것이 합리적

sample.data <- data.frame("aa-001"=1, "aa-005"=5, "bbb-001"=6, 
    "bbb-090"=7,"acdb-001"=2, "acdb-007"=1) 
test <- c("aa","acdb") 
nn <- names(sample.data) 
cols <- substr(nn,1,nchar(nn)-4) %in% test 
sample.data[,cols] 

아니면 끝나는 것을 제거 할 경우 "-" 일부 숫자는 사용할 수 있습니다 gsub

sample.data <- data.frame("aa-001"=1, "aa-005"=5, "bbb-001"=6, 
    "bbb-090"=7,"acdb-001"=2, "acdb-007"=1, check.names = FALSE) 
test <- c("aa","acdb") 
cols <- substr(nn,1,nchar(nn)-4) %in% test 
sample.data[,cols] 
+0

그것이 내가 한 일입니다. 구문을 게시 한 후 회신을 보았습니다. 어쨌든 답장을 보내 주셔서 감사합니다 :) –