2017-10-19 8 views
1

特定のデータのリスト形式への変換を探しています。何が欲しいの最良の例のデータを説明する:特定の形式のリストへのデータフレームの内容

library(dplyr)  

data <- as.data.frame(cbind(matrix(1:4, 10, 1, byrow=T), matrix(2:6, 10, 1, byrow=T), matrix(2:7, 10, 1, byrow=T))) %>% 
dplyr::group_by(V1) %>% 
dplyr::arrange(.by_group = TRUE) 

data # For emphasis "grouped by" V1 

# A tibble: 10 x 3 
# Groups: V1 [4] 
    V1 V2 V3 
<int> <int> <int> 
    1  2  2 
    1  6  6 
    1  5  4 

    2  3  3 
    2  2  7 
    2  6  5 

    3  4  4 
    3  3  2 

    4  5  5 
    4  4  3 

目的は、V1が分割(またはグループ)として機能する以下の形式のリスト-variableおよび列V2とV3となる分離サブリストを得ることですV1の:

str(list(list(c(2,6,5),c(2,6,4)), list(c(3,2,6),c(3,7,5)),list(c(4,3),c(4,2)), list(c(5,4),c(5,3)))) 

List of 4 
$ :List of 2 
    ..$ : num [1:3] 2 6 5 
    ..$ : num [1:3] 2 6 4 
$ :List of 2 
    ..$ : num [1:3] 3 2 6 
    ..$ : num [1:3] 3 7 5 
$ :List of 2 
    ..$ : num [1:2] 4 3 
    ..$ : num [1:2] 4 2 
$ :List of 2 
    ..$ : num [1:2] 5 4 
    ..$ : num [1:2] 5 3 

あなたが見ることができるように、私はV1で異なる値を持っているように、私はできるだけ多くのリストを取得します。これらのリストのそれぞれにおいて、V1の特定の値に属する列V2およびV3の項目は、別々のリストとして定義される。

今私が探しているのは、私のためにこれを行う特定の「公式」です。私はlapply/mapply/splitのさまざまな組み合わせで私の運を試しましたが、これまでに失敗しました。

答えて

2

我々はlist

library(purrr) 
library(dplyr) 
lst <- split(data[-1], data[1]) %>% 
        map(as.list) 

それとも別のアプローチに転換、 'データ' をsplitすることができますがnestにある、.$dataを抽出し、またlist

lst2 <- data %>% 
      nest(V2, V3) %>% 
      .$data %>% 
      map(as.list) 
str(lst2) 
#List of 4 
# $ :List of 2 
# ..$ V2: int [1:3] 2 6 5 
# ..$ V3: int [1:3] 2 6 4 
# $ :List of 2 
# ..$ V2: int [1:3] 3 2 6 
# ..$ V3: int [1:3] 3 7 5 
# $ :List of 2 
# ..$ V2: int [1:2] 4 3 
# ..$ V3: int [1:2] 4 2 
# $ :List of 2 
# ..$ V2: int [1:2] 5 4 
# ..$ V3: int [1:2] 5 3 

に変換し、名前'V2'、 'V3'は、unname

lst2 %>% 
    map(unname) %>% 
    str 
+0

あなたの答えをありがとう!しかし、最初の提案は私が探しているものではありません。あなたの提案 'strの違いに注意してください(リスト(リストを(C(2,6,5))、リスト(C(2,6,4))))' と私の所望の形態 'strの(リスト(リスト(c(2,6,5)、c(2,6,4)))) 。 2番目の提案にも同様の問題があります。 – MaHo

+0

@MaHoどちらのメソッドも、あなたの例に基づいて、あなたが示したのと同じ構造(初期のデータに依存する整数であるクラスを除いて)を返します – akrun

+1

ああ、str()を忘れました。どうもありがとうございます! – MaHo

関連する問題