2013-06-04 2 views
0

У меня есть список отсортированных подписок переменной длины. Каждый дополнительный список имеет переменный размер. Я хочу сделать две вещи. Первое представляет собой количество вхождений для каждого подписок. Например.R подсчет числа с переменными размерами вхождения

[[11533]] 
[1] "Mexican"  "Restaurants" 

[[11534]] 
[1] "Mexican"  "Restaurants" 

[[11535]] 
[1] "Food" "Grocery" "dinner" 

Для

Count     Item 
2   "Mexican"  "Restaurants" 

1   "Food" "Grocery" "dinner" 

И вторая часть разбить каждый список суб в вектор, а затем суммировать каждый пункт. Например

[[11533]] 
[1] "Mexican"  "Restaurants" 

[[11534]] 
[1] "Mexican"  "Restaurants" 

[[11535]] 
[1] "Food"  "Dinner"  "Grocery" 

Для

"Mexican" 
"Restaurants" 
"Mexican" 
"Restaurants" 
"Food"  
"Dinner"  
"Grocery" 

Для

"Mexican" 2 
"Restaurants" 2 
"Food" 1  
"Dinner" 1  
"Grocery" 1 

В Python, я хотел бы использовать для цикла, что петельные через мой основной список построить словарь, который увеличивается на единицу каждый раз, Я встречаю предмет уже в словаре. Однако я ребенок, когда речь заходит о R. Вот что я пробовал до сих пор.

tabled_data <- table(parsed_data) 

говорит мне, что нужно иметь данные, такие же длины

Я также попытался

for(i in length(parsed_data)){ 
    sum(parsed_data == parsed_data[i]) 
} 

, но я получаю сообщение об ошибке «Сравнение этих типов не реализуется "

ответ

2

Вы можете использовать table команду:

testData <- list(c("Mexican","Restaurants"),c("Mexican","Restaurants"),c("Food","Grocery","dinner")) 

# First question (join the vectors and then table them) 
    table(sapply(testData,paste,collapse="")) 

# Second problem (unlist the list and table it): 
    table(unlist(testData)) 

Если заказ в пределах векторов может измениться, вы можете отсортировать их перед их вставкой.

+0

Это именно то, что я искал. Что делает коллапс части sapply делать со списком символов? – AlexLordThorsen

+0

'collapse'option (для команды' paste') указывает, что вы хотели бы иметь между строками, когда вы их объединяете, так что, возможно, было бы даже лучше помещать туда пробелы, а не просто '' '' ' –