Применить функцию к списку фреймов данных в 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" 

Это возможно? Я точно знаю, что это работает для одного фрейма данных df

  combn(unique(df$id),2) 

person Saul Garcia    schedule 17.03.2016    source источник
comment
Интересно, заметили ли вы какую-то закономерность в перемаркировке ваших последних вопросы... Может быть, это несколько полезно?   -  person David Arenburg    schedule 17.03.2016


Ответы (1)


Нам нужно использовать unique(x$id)

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

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

lapply(seq_along(list1), function(i) combn(unique(list1[[i]]$id), 2))
person akrun    schedule 17.03.2016