Агрегирование векторов слов по множеству файлов - PullRequest
0 голосов
/ 07 октября 2019

В настоящее время у меня есть список векторов, где каждое число в списке представляет количество различных слов в файле.

Я хотел бы изменить этот список на фрейм данных, где имена строк - это имена файлов, а столбцы - это слова (отсортированные в алфавитном порядке только с одним столбцом на слово), а в каждом наблюдении учитывается определенное слово, в которое включены все слова, использованные в любом файле (т. е. если файл 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 голосов
/ 07 октября 2019

Здесь может пригодиться аргумент 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)
...