2016-03-17 3 views
3

Мне нужна помощь в том, как управлять списками итерационным способом.Применить функцию к списку данных в R

У меня есть следующий список list, который состоит из нескольких фреймов данных с одинаковыми столбцами, но с различным количеством строк. Пример:

[[1]] 
    id InpatientDays ERVisits OfficeVisits Narcotics 
1 a    0  0   18   1 
2 b    1  1   6   1 
3 c    0  0   5   3 
4 d    0  1   19   0 
5 e    8  2   19   3 
6 f    2  0   9   2 

[[2]] 
    id InpatientDays ERVisits OfficeVisits Narcotics 
7 a   16  1   8   1 
8 b    2  0   8   0 
9 c    2  1   4   3 
10 d    4  2   0   2 
11 e    6  5   20   2 
12 a    0  0   7   4 

Я хотел бы применить функцию, чтобы получить все возможные комбинации для идентификатора для каждого «кадра данных» в списке.

Я намеревался попробовать что-то вроде этого lapply(list1, function(x) combn(unique(list1[x]$id))) Что, конечно, не работает .. ожидая получить что-то вроде:

[[1]] 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] 
[1,] "a" "a" "a" "a" "a" "b" "b" "b" "b" "c" "c" "c" "d" "d" "e" 
[2,] "b" "c" "d" "e" "f" "c" "d" "e" "f" "d" "e" "f" "e" "f" "f" 

[[2]] 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] "a" "a" "a" "a" "b" "b" "b" "c" "c" "d" 
[2,] "b" "c" "d" "e" "c" "d" "e" "d" "e" "e" 

Возможно ли это? Я знаю наверняка, что это работает для одного dataframe df

combn(unique(df$id),2) 
+1

Интересно, если вы заметили некоторую закономерность в retagging вашего [недавнего] (http://stackoverflow.com/posts/36066336/revisions) [вопросы] (http://stackoverflow.com/posts/36048558/revisions) ... Возможно [это ] (http://stackoverflow.com/tags/dataframes/info) несколько полезен? –

ответ

6

Мы должны использовать unique(x$id)

lapply(list1, function(x) combn(unique(x$id),2)) 

код Ор является петлю 'list1' с помощью lapply. Анонимный вызов функции (function(x)) возвращает каждый из «data.frame» в пределах list i.e. «X» - это «data.frame». Поэтому нам нужно вызвать x$id (или x[['id']]), чтобы извлечь столбец «id». По сути, «х» не является индексом. Но, если нам нужно подмножество на основе индекса, мы должны перебрать последовательность «list1» (или если list элементы названы, затем цикл через names его)

lapply(seq_along(list1), function(i) combn(unique(list1[[i]]$id), 2)) 
Смежные вопросы