对于许多文件,逐字汇总单词向量包

时间:2019-10-07 19:09:47

标签: r data-cleaning

我目前有一个向量列表,列表中的每个数字代表文件中不同单词的计数。

我想将此列表更改为一个数据框,其中行名是文件名,列是单词(每个单词仅按字母顺序排列,每个单词仅一列),并且每次观察一个单词的计数,其中所有单词包含在任何文件中的单词(即,如果文件a包含文件b不包含的单词,则文件b中的单词计数为0)。

因此,基本上当前的代码现在看起来像:


file1 <- c(1,5,7,2)
names(file1) <- c("a", "by", "her", "the")

file2 <- c(10,5,2)
names(file2) <- c("a", "and", "to")

list(file1, file2)

我想要的是:


df <- data.frame(matrix(nrow=2, ncol=6, byrow=T, data=c(1, 0, 5, 7, 2, 0,
                                                        10, 5, 0,0,0,2)))
colnames(df) <- c("a", "and", "by", "her", "the", "to")
rownames(df) <- c("file1", "file2")
df


谢谢。

1 个答案:

答案 0 :(得分:0)

fill软件包中rbindlist函数的data.table参数在这里可以派上用场。

library(data.table)

nm = c("file1", "file2")
d = rbindlist(lapply(mget(nm), function(x) data.frame(t(x))), fill = TRUE)
d = as.data.frame(d)
row.names(d) = nm
d
#       a by her the and to
#file1  1  5   7   2  NA NA
#file2 10 NA  NA  NA   5  2

要重新排序d并将NA替换为0,则需要采取进一步的步骤

d = d[,order(colnames(d))]
d = replace(d, is.na(d), 0)