リストのリストがあり、それぞれが同一の構造を持っています。各サブリストの要素の 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行のデータフレーム全体を単一のリスト要素として配置したいです)。
これを行う簡単な方法はありますか?