我有一个列表列表,每个列表都有相同的结构。每个子列表中的元素之一是键值。我想向每个子列表添加一个新元素,它是包含匹配键值的数据框的行。我认为这基本上就像“合并”,除了一个列表。
所以我的列表和数据框看起来像这样
#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 行数据框作为单个列表元素放置)。
有没有更简单的方法来做到这一点?