2016-07-12 5 views
0

as.matrix으로 강요 한 R {tm} 패키지의이 문서 용어 행렬을 가지고 있습니다. 여기 MWE :행렬을 서브 세트하고, 코드 명을 어드레싱

> inspect(dtm[1:ncorpus, intersect(colnames(dtm), thai_list)]) 
<<DocumentTermMatrix (documents: 15, terms: 4)>> 
Non-/sparse entries: 17/43 
Sparsity   : 72% 
Maximal term length: 12 
Weighting   : term frequency (tf) 

Terms 
Docs toyota_suv gmotors_suv ford_suv nissan_suv 
1  0  1  0   0 
2  0  1  0   0 
3  0  1  0   0 
4  0  2  0   0 
5  0  4  0   0 
6  1  1  0   0 
7  1  1  0   0 
8  0  1  0   0 
9  0  1  0   0 
10  0  1  0   0 

은 내가 toyota_suv하지만 다른 차량을 참조 문서 만 (행)을 얻을 수 있도록,이 as.matrix(dtm) 서브 세트를해야합니다. 하나의 용어 (toyota_suv)에 대해 서브 세트를 얻으려면 dmat<-as.matrix(dtm[1:ncorpus, intersect(colnames(dtm), "toyota_suv")])을 사용하는 것이 좋습니다. 검색어를 설정하려면 어떻게합니까? : toyota_suv는 0이 아니지만 non-toyota_suv 열의 값은 0입니까? 나는 열 단위로 ==0을 지정할 수 있었지만이 행렬은 동적으로 생성되었습니다. 일부 시장에서는 4 대의 자동차가있을 수 있으며 일부 시장에서는 10 대의 자동차가있을 수 있습니다. 나는 미리 colnames를 지정할 수 없다. all_others == 0처럼 (non-toyota_suv가 아닌) 모든 열을 0으로 채우려면 어떻게해야합니까? 도움이 될 것입니다.

답변

1

당신은 비 제로를위한 일치하도록 toyota_suv의 인덱스 위치를 받고, 다음 dtm을 부분 집합하여이 작업을 수행 할 수 있습니다, 그리고 다른 모든 컬럼에 동일한 인덱스 변수에 부정적인 색인을 사용 : 당신은 시도 할 수 그것들이 모두 0인지 확인하십시오. 여기

내가 수정하여 dtm 약간 toyota_sub 비 제로인 두 경우 당신이 찾고있는 기준을 충족합니다 (예 아무도 그들을 만난 이후) 그래서 :

dtm <- read.table(textConnection(" 
toyota_suv gmotors_suv ford_suv nissan_suv 
     0  1  0   0 
     0  1  0   0 
     0  1  0   0 
     0  2  0   0 
     0  4  0   0 
     1  0  0   0 
     1  0  0   0 
     0  1  0   0 
     0  1  0   0 
     0  1  0   0"), header = TRUE) 

을 그리고 그것은 작동 :

# get the index of the toyota_suv column 
index_toyota_suv <- which(colnames(dtm) == "toyota_suv") 

# select only cases where toyota_suv is non-zero and others are zero 
dtm[dtm[, "toyota_suv"] > 0 & !rowSums(dtm[, -index_toyota_suv]), ] 
## toyota_suv gmotors_suv ford_suv nissan_suv 
## 6   1   0  0   0 
## 7   1   0  0   0 

참고 :이 정말 텍스트 분석에서 모든 질문,하지만 매트릭스 객체를 하위 집합하는 방법은 오히려 아니다.

+0

감사합니다. @Ken Benoit : 거의 다 왔어요. – Pradeep

+0

편집 제한 시간. non-toyota_suv 열의 또 다른 객체를 생성하려고합니다 :'x.df3 <-x.df [, names (x.df)! = "toyota_suv", drop = FALSE]'그리고 나서이 객체에서 모두 0 조건을 실행합니다. . 하지만이 부분 집합을 첫 번째 조건'toyota_suv! = 0'과 통합하는 것은 실종되었습니다. 중간 단계를 피할 수있는 옵션이 없다고 가정합니다. 또한, 부분 집합 함수를 사용하거나'which' 또는'with'를 사용하여 실행하는 것에 대한 너무 많은 부정적인 의견도 있습니다. 그래서 나는 확실하지 않았다. – Pradeep

0

정확한 코드를 제공하고 작업 할 예제 데이터 세트를 제공하면 작업을 복제하고 실제 예제를 제공하는 데 도움이됩니다.

귀하의 질문을 정확하게 이해하면 Toyota가 아닌 모든 항목을 0으로 표시하는 방법을 찾고 있습니다.

df[colnames(df) != "toyota"] <- 0