在r的匹配列表中组合不同长度的元素

  • 本文关键字:元素 组合 列表 r list
  • 更新时间 :
  • 英文 :


我正试图从两个相应的列表中组合信息,这两个列表都是4。第一个列表只包含4个元素中的1个元素,其结构如下:

List of 4
$ :'data.frame':   8640 obs. of  3 variables:
..$ x    : num [1:8640] -108 -108 -108 -107 -107 ...
..$ y    : num [1:8640] 25.9 25.9 25.9 25.9 25.9 ...
..$ layer: num [1:8640] 0 0 0 0 0 0 0 0 0 0 ...
$ :'data.frame':   20520 obs. of  3 variables:
..$ x    : num [1:20520] -116 -116 -116 -115 -115 ...
..$ y    : num [1:20520] 32.9 32.9 32.9 32.9 32.9 ...
..$ layer: num [1:20520] 0.002 0 0 0 0 ...
$ :'data.frame':   13500 obs. of  3 variables:
..$ x    : num [1:13500] -112 -112 -112 -111 -111 ...
..$ y    : num [1:13500] 29.9 29.9 29.9 29.9 29.9 ...
..$ layer: num [1:13500] 0.00583 0.01166 0.01749 0.01749 0.01749 ...
$ :'data.frame':   15300 obs. of  3 variables:
..$ x    : num [1:15300] -117 -117 -117 -116 -116 ...
..$ y    : num [1:15300] 31.9 31.9 31.9 31.9 31.9 ...
..$ layer: num [1:15300] 0 0 0 0 0 0 0 0 0 0 ...

我有另一个列表,也是4个,我想把列表中的数据作为2个单独的列添加到第一个列表中相应元素的数据框中。

第二个列表的结构如下:

List of 4
$ : chr [1:2] "green" "0.00689301"
$ : chr [1:2] "blue" "0.01291301"
$ : chr [1:2] "red" "0.02905452"
$ : chr [1:2] "black" "0.00879968"

基本上,我想要一个新的列表,在列表的4个成员中每个都有以下结构:

List of 4
$ :'data.frame':   8640 obs. of  3 variables:
..$ x    : num [1:8640] -108 -108 -108 -107 -107 ...
..$ y    : num [1:8640] 25.9 25.9 25.9 25.9 25.9 ...
..$ layer: num [1:8640] 0 0 0 0 0 0 0 0 0 0 ...
..$ color: chr [1:8640] "green" "green" "green"...
..$ value: chr [1:8640] "0.00689301" "0.00689301" ...
$ :'data.frame':   20520 obs. of  3 variables:
..$ x    : num [1:20520] -116 -116 -116 -115 -115 ...
..$ y    : num [1:20520] 32.9 32.9 32.9 32.9 32.9 ...
..$ layer: num [1:20520] 0.002 0 0 0 0 ...
..$ color: chr [1:20520] "blue" "blue" "blue" ...
..$ value: chr [1:20520] "0.01291301" "0.01291301" ...

我已经尝试使用mapply()和c()一次性组合这些信息,但这并没有给我灵活性,将这些新成员从我的第二个列表中的单个值更改为与相应的新列表长度相同的向量。

我们可以用Map

Map(function(x, y) transform(x, color = y[1], value = y[2]), lst1, lst2)
# or another way is
Map(function(x, y) {x[c("color", "value")] <- as.list(y); x}, lst1, lst2)

或与map2

library(purrr)
library(dplyr)
map2(lst1, lst2, ~ .x %>%
mutate(color = .y[1], value = .y[2]))

最新更新