2013-05-01 6 views
2

Учитывая этот образец данные:Добавить недостающие столбцы в таблицу R

x = 1:12; names(x) = LETTERS[1:length(x)] 
y = c('A','C','E','F','J','E','K','L','E','L','F','A','E') 

Когда я table(y) я получаю:

A C E F J K L 
2 1 4 2 1 1 2 

Как расширить, что включать нулевые записи для все колонки заголовки в x? Другими словами, выход я после:

A C E F J K L B D G H I 
2 1 4 2 1 1 2 0 0 0 0 0 

(несортированный, как показано здесь, или сортируют, я не возражаю.)

ответ

10

Используйте фа ctor:

table(factor(y, levels = names(x))) 
# A B C D E F G H I J K L 
# 2 0 1 0 4 2 0 0 0 1 1 2 
5

Я не могу придумать способ сделать это с table, но это довольно просто один лайнер независимо:

sapply(names(x), function(name) {sum(y == name)}) 

Выход:

A B C D E F G H I J K L 
2 0 1 0 4 2 0 0 0 1 1 2 
+0

Спасибо! Я дал галочку flodel, так как он наилучшим образом отвечает на заданный вопрос, но это был код, который я _actually_ хотел (потому что мне нужен именованный вектор, а не 'table', а' as.vector (mytable) ', кажется, теряет имена). –

+1

@ DarrenCook, вы можете сделать 'c (mytable)' для преобразования в целочисленный вектор и сохранения имен. – flodel

Смежные вопросы