2016-05-31 8 views
0

특정 문자열로 데이터 프레임 내의 일부 데이터를 분할하고 빈도를 계산하고 싶습니다.문자열 및 rbind 사용하여 lapply

몇 가지 방법으로 놀고 나면 방법을 찾았지만 결과에는 약간의 오류가 있습니다.

예 :

데이터 프레임 데이터 파일 :

data 
abc hello 
hello 
aaa 
zxy 
xyz 

목록 :

list 
abc 
bcd 
efg 
aaa 

내 코드 :

이 예에서
lapply(list$list, function(x){ 
    t <- data.frame(words = stri_extract(df$data, coll=x)) 
    t<- setDT(t)[, .(Count = .N), by = words] 
    t<-t[complete.cases(t$words)] 
    result<-rbind(result,t) 
    write.csv(result, "new.csv", row.names = F) 
}) 

나는 CSV 파이를 기대 다음과 같은 결과와 르 :

그러나 내가 가진 내 코드와
words Count 
abc  1 
aaa  1 

:

words Count 
aaa  1 

나는 내가 rbind를 사용할 때 stri_extractabc helloabc 그래서 아마 오류가 발생 파악해야을 알아?

+0

은 참조 :'stringi :: stri_list2matrix' – gagolews

답변

3

write.csv 파일을 루프 밖으로 이동해야합니다. 그렇지 않으면 이전에 저장 한 파일을 덮어 쓰게되고 마지막 단계에서만 파일이 저장됩니다. 이렇게하면 함수에서 result 변수를 수정할 수 없기 때문에 lapply 외부에서 결과가 rbind이어야합니다.

result <- do.call(rbind, lapply(list$list, function(x){ 
           t <- data.frame(words = stri_extract(df$data, coll=x)) 
           t<- setDT(t)[, .(Count = .N), by = words] 
           t<-t[complete.cases(t$words)] 
           t 
})) 

write.csv(result, "new.csv", row.names = F) 
+0

감사합니다, 매우 도움이 –

+0

당신은 APPEND와 루프 = T 내에서 write.csv 수 없었다? 어쨌든 프로세스가 느려지므로 한 번만 쓰면됩니다. –

+0

그것은 실행 가능한 솔루션이기도합니다. 계속해서 시도해 볼 수 있습니다. 성능에 대한 확신이 없습니다. – Psidom