1

リストのリストがあり、それぞれが同一の構造を持っています。各サブリストの要素の 1 つはキー値です。各サブリストに新しい要素を追加したいと思います。これは、一致するキー値を含むデータ フレームの行です。これは基本的に「マージ」に似ていると思いますが、リストが 1 つあるだけです。

だから私のリストとデータフレームはこのようになります

#Define the list of lists and the data frame
l <- list()
l[[1]] <- list(i=1, data=1:5)
l[[2]] <- list(i=2, data=runif(5))
l[[3]] <- list(i=1, data=rnorm(5))
d <- data.frame(i=c(1, 2), val1=c(TRUE, FALSE), val2 = c("a", "b"))

そして、私はで終わりたいです

> l_mod[[1]]
$i
[1] 1

$data
[1] 1 2 3 4 5

$newData
val1  val2
TRUE     a

の各要素についてもl_mod同様$newDataで、 の適切な行ですd。の各行にdは の一意の値があると仮定できることに注意してくださいd$i

私の現在のアプローチは、一致する関数を作成してから呼び出すことですlapply

matchingRow <- function(indexValue, df) {
  return(df[df$i==indexValue, -1])
}

l_mod <- lapply(l, function(x) c(x, newData=matchingRow(x$i, d)))

これは基本的に機能しますが、複雑すぎるようです。(また、各列をd新しいリストの個別の要素に分割します。1行のデータフレーム全体を単一のリスト要素として配置したいです)。

これを行う簡単な方法はありますか?

4

1 に答える 1

3

特に種はありません。余分な関数呼び出しを削除するだけで問題ないようです。:

l_mod2 <- lapply(l, function(x) list(x, newData=d[d$i==x$i, -1]))

    l_mod2[[3]]
[[1]]
[[1]]$i
[1] 1

[[1]]$data
[1] -0.109289881 -0.577508057  1.416671342 -1.130346543 -0.002256123


$newData
  val1 val2
1 TRUE    a
于 2012-11-18T00:02:58.773 に答える