首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用stringi和rbind进行应用。

使用stringi和rbind进行应用。
EN

Stack Overflow用户
提问于 2016-05-31 15:32:26
回答 1查看 99关注 0票数 0

我想用一个特定的字符串来分割数据帧中的一些数据,并计算频率。

在尝试了几种方法之后,我想出了一个方法,但是我的结果有一个小错误。

示例:

数据帧数据文件:

代码语言:javascript
复制
data
abc hello
hello
aaa
zxy
xyz

列表:

代码语言:javascript
复制
list
abc
bcd
efg
aaa

我的代码:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
words Count
abc     1
aaa     1

然而,用我的代码我得到了:

代码语言:javascript
复制
words Count
aaa     1

我知道stri_extract应该在abc hello中识别abc,所以当我使用rbind时可能会发生错误

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-31 16:28:13

您需要将write.csv文件移出循环,否则它将覆盖先前保存的文件,并且只能在最后阶段保存该文件。通过这样做,您必须在rbind之外对结果进行lapply,因为您不能在函数中修改result变量。

代码语言:javascript
复制
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)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37549905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档