我目前有一个向量列表,列表中的每个数字代表文件中不同单词的计数。
我想将此列表更改为一个数据框,其中行名是文件名,列是单词(每个单词仅按字母顺序排列,每个单词仅一列),并且每次观察一个单词的计数,其中所有单词包含在任何文件中的单词(即,如果文件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
谢谢。
答案 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)