2017-08-15 6 views
1

リスト内のデータフレームを特定の形式(最小限の先例)で変換したいと思います。 次のデータフレームでは、それぞれ5つの要素のリストを持つ5つの要素のリストを作成したいと思います。data.frame/tibbleをグループ化された方法でリストに変換する

parameters = tidyr::expand(tibble(id=1:5, value = 1:5 * 2),id,value) 

# A tibble: 6 x 2 
    id value 
    <int> <dbl> 
1  1  2 
2  1  4 
3  1  6 
4  1  8 
5  1 10 
6  2  2 

result = base::split(parameters, list(parameters$id)) 
result = lapply(result, function(x) { x["id"] <- NULL; x }) 

これまでのところ、id right(5要素)は取得されていましたが、その中のサブ要素は取得されません。私は

> as.list(a$`1`$value) 
[[1]] 
[1] 2 

[[2]] 
[1] 4 

[[3]] 
[1] 6 

[[4]] 
[1] 8 

[[5]] 
[1] 10 

結果は、この

[1] 
    [[1]] 
    [1] 2 

    [[2]] 
    [1] 4 

    [[3]] 
    [1] 6 

    [[4]] 
    [1] 8 

    [[5]] 
    [1] 10 
[2] 
    [[1]] 
    [1] 2 

    [[2]] 
    [1] 4 

    [[3]] 
    [1] 6 

    [[4]] 
    [1] 8 

    [[5]] 
    [1] 10 

のようなものに見えることなどのようにそれを持ってしたいのですが、一方、それは最初の要素

> a[1] 
$`1` 
# A tibble: 5 x 1 
    value 
    <dbl> 
1  2 
2  4 
3  6 
4  8 
5 10 

のために与えられる任意のエレガントな方法はありますこれを達成するには?

あなたが欲しいものを行う必要があり lapply
+1

注 'こと。 – lmo

+0

ヒントありがとう! – MaHo

答えて

4

ラップas.list:結果=ベース::スプリット(パラメータ$値、リスト(パラメータ$ idは)) `二` lapply`ラインに、不要なを作る

lapply(with(parameters, split(value, id)), as.list) 

$`1` 
$`1`[[1]] 
[1] 2 

$`1`[[2]] 
[1] 4 

$`1`[[3]] 
[1] 6 

$`1`[[4]] 
[1] 8 

$`1`[[5]] 
[1] 10 


$`2` 
$`2`[[1]] 
[1] 2 

$`2`[[2]] 
[1] 4 

$`2`[[3]] 
[1] 6 

$`2`[[4]] 
[1] 8 

$`2`[[5]] 
[1] 10 
関連する問題