2016-03-17 98 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 

我想应用一个函数来获取列表中每个“数据框”的id的所有可能组合。

我打算尝试这样的事情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) 
+1

不知你已经注意到您的[近期](http://stackoverflow.com/posts/36066336/revisions)[问题](http://stackoverflow.com/posts/36048558/revisions)的重复某种模式...也许[this ](http://stackoverflow.com/tags/dataframes/info)有点帮助? –

回答

6

我们需要使用unique(x$id)

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

的OP的代码是循环使用的lapply“列表1”。匿名函数调用(function(x))返回list中的每个'data.frame',即'x'是'data.frame'。所以,我们只需要拨打x$id(或x[['id']])来提取'id'列。实质上,'x'不是一个索引。但是,如果我们需要根据索引集,我们通过“列表1”的序列,具有循环(或者如果list元素命名,然后通过它的names循环)

lapply(seq_along(list1), function(i) combn(unique(list1[[i]]$id), 2)) 
相关问题