1

リストのリストに変換しようとしている単純なデータフレームがありますが、いくつかの列を各行の数値ベクトルに結合しています。たとえば、データフレームは次のようになります。

Site       c1       c2       c3
MUT      -3.71     1.93     0.26
MBT      -2.82     2.52     0.58
MFW      -1.67     1.60    -0.09

これで再現可能:

regression <- structure(list(site = structure(1:3, .Label = c("MUT", "MBT", 
"MFW", "EUT", "EFW", "EBT", "PBT", "PUT", "PFW"), class = "factor"), 
    c1 = c(-3.71, -2.82, -1.67), c2 = c(1.93, 2.52, 1.6), c3 = c(0.26, 
    0.58, -0.09)), .Names = c("site", "c1", "c2", "c3"), row.names = c(NA, 
3L), class = "data.frame")

各行からリストを作成し、列「c1」、「c2」、および「c3」を「params」という名前の数値ベクトルに結合し、それぞれの値を「c1」、「c2」とします」など…

望ましい出力は次のようになります(dput以外に読みやすく書く方法がわからない)

desired <- list(structure(list(name = "MUT", params = structure(c(-3.71, 
1.93, 0.26), .Names = c("c1", "c2", "c3"))), .Names = c("name", 
"params")), structure(list(name = "MBT", params = structure(c(-2.82, 
2.52, 0.58), .Names = c("c1", "c2", "c3"))), .Names = c("name", 
"params")), structure(list(name = "MFW", params = structure(c(-1.67, 
1.6, -0.09), .Names = c("c1", "c2", "c3"))), .Names = c("name", 
"params")))

分割を少しいじりましたが、データ フレームのリストが生成されました。さらに重要なことに、呼び出しで列を結合する方法をまだ見つけられませんでした。私はリストに慣れていないので、おそらくこれを行う簡単な方法がいくつかあるでしょう。ありがとう、

4

1 に答える 1

2

あなたの質問は明確ではありませんが、次のように聞こえます。

> lapply(split(regression[-1], seq_len(nrow(regression))), unlist)
$`1`
   c1    c2    c3 
-3.71  1.93  0.26 

$`2`
   c1    c2    c3 
-2.82  2.52  0.58 

$`3`
   c1    c2    c3 
-1.67  1.60 -0.09 

> str(lapply(split(regression[-1], seq_len(nrow(regression))), unlist))
List of 3
 $ 1: Named num [1:3] -3.71 1.93 0.26
  ..- attr(*, "names")= chr [1:3] "c1" "c2" "c3"
 $ 2: Named num [1:3] -2.82 2.52 0.58
  ..- attr(*, "names")= chr [1:3] "c1" "c2" "c3"
 $ 3: Named num [1:3] -1.67 1.6 -0.09
  ..- attr(*, "names")= chr [1:3] "c1" "c2" "c3"

サンプル出力を投稿したので、わずかなバリエーションを示します。

out <- lapply(split(regression, seq_len(nrow(regression))), 
              function(x) list(name = as.character(x[[1]]),
                               params = unlist(x[-1])))
str(out)
# List of 3
#  $ 1:List of 2
#   ..$ name  : chr "MUT"
#   ..$ params: Named num [1:3] -3.71 1.93 0.26
#   .. ..- attr(*, "names")= chr [1:3] "c1" "c2" "c3"
#  $ 2:List of 2
#   ..$ name  : chr "MBT"
#   ..$ params: Named num [1:3] -2.82 2.52 0.58
#   .. ..- attr(*, "names")= chr [1:3] "c1" "c2" "c3"
#  $ 3:List of 2
#   ..$ name  : chr "MFW"
#   ..$ params: Named num [1:3] -1.67 1.6 -0.09
#   .. ..- attr(*, "names")= chr [1:3] "c1" "c2" "c3"
于 2013-10-31T18:27:36.420 に答える