2016-06-19 2 views
0

두 개의 행렬이 있습니다. 하나는 index 행렬 (ncol = 1, nrow = 20,000)이고, 검색하고자하는 값을 저장하고, 다른 행렬은 data 행렬이며, 큰 데이터 세트 (ncol = 1, nrow = 5,000).여러 값에 대해 행렬을 검색하고 행 이름을 반환하는 방법은 무엇입니까?

index 매트릭스 (water, meat, gas .... 열 이름이다)

water DFAFADFADF 
meat  QEREQRQTQTQ 
gas  FEQQFQEFQF 
. 
. 
. 
.. 

data 매트릭스 :

( Tom, Luis, Jerry, Vincent, Richard ... 행 이름이다)
Tom    dfqfqfAFADFADaveffefd 
Luis    eqeqfqefAFADFADuouojoimoij 
Jerry   dafadfe3321AFADFADfdeff 
Vincent   e31413413qeffffff 
Richard   121eefq3ffAFADFADfffqffqff 
. 
. 
. 
.. 

0131의 각 행 index 행렬에서 각 값을 찾고 싶습니다.행렬 그 문자열을 포함하고 data 행렬의 행 이름을 기록한 다음 index 행렬에있는 문자열 행의 다음 열 (또는 단일 열에 ","로 구분)에 넣습니다.

예를 들어, 루프를 가지고 인덱스 매트릭스에서 값 을 가져 와서 데이터 매트릭스에서이 문자열이 포함 된 행을 검색하면 톰, 루이스, 제리, 리처드가 data 매트릭스에 포함되어 있음을 발견했습니다. 문자열, 그래서 나는

index 행렬 위해 index 매트릭스를 업데이트

water DFAFADFADF Tom, Luis, Jerry, Richard 
meat  QEREQRQTQTQ 
gas  FEQQFQEFQF 
. 
. 
. 
.. 

그리고 나는 다시 data 매트릭스를 검색 할 수 index 매트릭스, QEREQRQTQTQ에 다음 값을 index 행렬의 마지막 행을 완료 할 때까지 index 행렬을 다시 업데이트하십시오.

루프를 사용할 수 있습니까? 우리는 루프가 필요할 수도 있다고 생각하지만 for (....)을 사용합니다. 당신은 당신이 다운 스트림 정보를 처리하는 방법에 따라 거기에 unlist()를 호출해야 할 수도 있으므로

+0

당신은 %에서'%'를 사용하거나'당신이 예를 적어주세요 수 – akrun

+0

match'? 많은 감사! 나는이 일에 전적으로 순진합니다. ... –

답변

0
index <- data.frame(one = c("ABC", "DEF", "GHI", "JKL")) 
rownames(index) <- c("water", "meat", "fruit", "bread") 
data <- data.frame(one = c("ABCDEF", "DEFZMN", "MNOABC", "ZXCJKL")) 
rownames(data) <- c("Tom", "Jerry", "Rob", "Nate") 

results <- data.frame() 
for (r in 1:nrow(index)) { 
    index$results[r] <- list(rownames(data)[grep(index$one[r], data$one, ignore.case = T)]) 
    count <- length(unlist(index$results[r])) 
    df <- data.frame(data_match = unlist(index$results[r]), 
        pattern = rep(index$one[r], times = count), 
        index_match = rep(rownames(index)[r], times = count)) 
    results <- rbind(results, df) 
} 
reshape2::dcast(results, index_match ~ data_match) 

이, 열 인덱스 $ 결과에서 list()를 생성합니다. 또한 R에 당신은 벡터라는 이름의 한 수 있으며, 경우에 당신은 아마 당신은 그냥 같이 명명 된 문자 벡터를해야 할 수도 있습니다 하나 개의 컬럼 데이터 프레임을했다 :

index <- c("ABC", "DEF", "GHI", "JKL") 
names(index) <- c("water", "meat", "fruit", "bread") 

다음 시간 동안 일치 간단하게 만들 수 있습니다.

+0

친애하는 네이선, 대단히 감사합니다! 그것은 일했다 !!! 그러나 앞서 언급 한 것처럼 인덱스 $ 결과는 인덱스 행렬의 모든 행에 대한 목록이므로 "인덱스"의 결과를 출력하는 데 문제가있었습니다. 이 인덱스 매트릭스를 CSV 파일로 출력 할 수있는 방법이 있습니까? write.table (index, file = "index.csv", sep = ",")이 작동하도록 인덱스 $ 결과를 무언가로 변환하기 위해 무언가를해야합니까? 아니면 "인덱스"매트릭스를 배치하는 더 좋은 방법이 있습니까? 큰 도움을 주셔서 대단히 감사합니다! –

+0

나는 csv 준비 데이터 프레임을 작성하기 위해 함께 노력하고있다.확실하지 않은 방법을 여러 열 결과 형식으로 아직 강제로 ... – Nate

+0

이 작업을 수행하는 더 좋은 방법이있을 수 있지만 그것을 모릅니다. 그 해결책이 당신을 위해 일할 수 있기를 바랍니다 – Nate

0

짧은 솔루션 :

row.names(data)[apply(data, 1, function(x) { 
    sapply(x, function(y) y %in% c("DFAFADFADF", "QEREQRQTQTQ", "FEQQFQEFQF")) 
}), ] 
+0

안녕하세요, 마이크, 솔루션을 제공해 주셔서 감사합니다. 제 질문에서 본 예시에 기초하여 c ("a", "b", 3)가 무엇을 의미하는지 더 명확히 할 수 있습니까? 그리고 y는 어디에서 읽습니까? 나는 코딩에 완전히 순진하다. 고마워요! –

+0

이러한 값은 세탁 행에서 식별하려는 모든 값을 나타냅니다. apply (행렬, 1, 함수) 함수를 사용하면 각 행 (1) 또는 각 열 (2)을 사용하여 함수를 실행할 수 있습니다. 더 복잡한 함수는 apply (matrix, 1, function (x) foo (foo2 (x))로 호출 할 수 있습니다. 다른 적용 함수를 지정할 수도 있습니다.이 경우 x는 행 x가 sapply() 호출과 y는 교차 참조 값 함수에 사용 된 객체 (행의 n 번째 값)가됩니다. – mkearney

관련 문제