R lapply 使用 stringi 和 rbind
R lapply using stringi and rbind
我想通过特定的字符串拆分数据框中的一些数据并计算频率。
在尝试了一些方法后,我想出了一个方法,但我的结果有点错误。
示例:
数据框数据文件:
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 hello
中识别 abc
所以当我使用 rbind
时可能会发生错误?
您需要将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)
我想通过特定的字符串拆分数据框中的一些数据并计算频率。
在尝试了一些方法后,我想出了一个方法,但我的结果有点错误。
示例:
数据框数据文件:
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 hello
中识别 abc
所以当我使用 rbind
时可能会发生错误?
您需要将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)