2016-07-08 1 views
0

나는 MS 오피스 프로그램과 그들이 우리 집 주변의 다양한 컴퓨터에 충돌하는 데이터를 나열하는 dataframe 있습니다R - 데이터 프레임의 텍스트를 검색하고 별도의 열 수를 지정

Services-Impacted Date 
MS Word   2013-03-01 
MS Excel   2013-03-03 
MS Powerpoint  2014-01-01 
Excel,ppt,word  2014-05-04 
MS Word   2015-03-01 
MS Excel   2015-03-03 
MS Powerpoint  2015-01-01 

"MS Excel"또는 "Excel"이라는 말을 사용하면 say MS라는 새로운 열에 값 1을, 발견되지 않으면 0을 할당 할 수 있습니다. 첫 번째 줄은 잘 작동하지만 알아낼 수 없습니다

"MS Word" %in% Office$Services-Impacted[1] 
TRUE 

count the number of rows 
i <-nrow(Office) 
i 

loop for the number of rows 
for(i in 1:i) 
    { 
     # diff the time and print it out 
     "MS Word " %in% Office$Services-Impacted[i] 

    } 

어떻게 전체 불구하고 반복하기 : 나는 다른 방법의 무리를 검토 한

Services-Impacted Date  MS Word MS Excel MS Powerpoint 
MS Word   2013-03-01 1  0  0 
MS Excel   2013-03-03 0  1  1 
MS Powerpoint  2014-01-01 0  0  1 
Excel,ppt,word  2014-05-04 1  1  1 
MS Word   2015-03-01 1  0  0 
MS Excel   2015-03-03 0  1  1 
MS Powerpoint  2015-01-01 0  0  0 

: 그래서 나는이 같은 최종 결과를 싶습니다 [i]로 묶어서 데이터 프레임이 TRUE 또는 FALSE의 목록을 반환하지 않습니다. 또한 와일드 카드 검색 사용 방법을 알 수 없습니다. 각 검색을 하드 코딩해야합니다.

는 또한 나에게 조나단

어떤 응답 사전에 1 또는 0

감사와 제품의 열을 채울 수있는 메커니즘을 제공보다 테이블이 아니라 그렙 및 필터 만이 유일한 필터 같은 몇 가지 옵션을 연구했습니다 당신의 루프의 일환으로 i` :

+0

내가 도울 수 없지만 통지, 당신은 1 년 전'사용한 분할 후 qdapTools에서 mtabulate를 사용할 수 있습니다. – theArun

+0

예상되는 출력의 값이 맞는지 확인하십시오. 두 번째 줄에서 MS 파워 포인트를 얻으려면 어떻게해야합니까? – akrun

+0

원래 데이터 프레임 텍스트에 오타가 있습니다. 나는 그 이후로 올바른 것을했습니다. –

답변

2

우리는 '서비스 - 영향받은'열

library(qdapTools) 
d1 <- mtabulate(strsplit(as.character(df1[,'Services-Impacted']), ',')) 
i1 <- grep("(?i)(e)xcel", names(d1)) 
i2 <- grep("Power|ppt$", names(d1)) 
cbind(df1, +(data.frame(MSWord = d1[,5], MSExcel = rowSums(d1[i1]), 
       MSPowerpoint = rowSums(d1[i2]))!=0)) 
+1

신속한 답변을 보내 주셔서 감사합니다. 내 담당자가 너무 낮아서 대답을 회상 할 수 없습니다. 감사합니다 –

+0

@ 조나단 던 코멘트 주셔서 감사합니다. 투표 옆에있는 눈금을 클릭하여 답변을 수락 할 수 있습니다 (담당자에게는 문제가 없음). 또한 점수를 받게됩니다. – akrun

관련 문제