3

反復的な方法でリストを管理する方法について助けが必要です。

次のリスト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) 
4

1 に答える 1

6

使用する必要がありますunique(x$id)

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

OPのコードは、を使用して「list1」をループしていlapplyます。匿名関数呼び出し ( function(x)) は、「x」内の「data.frame」のそれぞれを返します。listつまり、「data.frame」です。したがって、x$id(またはx[['id']]) を呼び出して「id」列を抽出するだけです。本質的に、「x」はインデックスではありません。ただし、インデックスに基づいてサブセット化する必要がある場合は、「list1」のシーケンスをループする必要があります (または、list要素に名前が付けられている場合は、そのリストをループしますnames) 。

lapply(seq_along(list1), function(i) combn(unique(list1[[i]]$id), 2))
于 2016-03-17T16:27:52.233 に答える