簡體   English   中英

在 R 的匹配列表中組合不同長度的元素

[英]Combining elements of different lengths in matching lists in R

我正在嘗試合並來自兩個相應列表的信息,這兩個列表都是 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]))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM