2016-05-31 53 views
0

我想通過特定的字符串拆分數據框中的一些數據並計算出頻率。使用stringi和rbind的R 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 

我知道stri_extract應確定內abc helloabc所以也許錯誤發生時,我使用rbind

+0

參見:'stringi :: stri_list2matrix' – gagolews

回答

3

您需要將write.csv文件移出循環,否則它將覆蓋之前保存的文件,並且只會在最後階段獲取文件。通過這樣做,您將不得不rbind您的結果在lapply之外,因爲您無法修改函數中的result變量。

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

你不能有附加循環= T內write.csv?這可能會減慢這個過程,我只需要寫一次,只是要求 –

+0

這也是一個可行的解決方案。你可以繼續嘗試。不確定的表現。 – Psidom