在 R 中展平、追加和重新列出列表
Flatten, append, and relist a list in R
我在 R 中有两个列表列表,我想加入一个列表列表并保留原始结构。考虑以下示例:
library(tidyverse)
library(dplyr)
library(purrr)
a <- data.frame(c("MA", "V", "UDR"), stringsAsFactors=FALSE)
b <- data.frame(c("MMM", "AAPL"), stringsAsFactors=FALSE)
c <- data.frame(c("MO", "ABT", "XYZ", "Q"), stringsAsFactors=FALSE)
d <- data.frame(c("AA", "NEM", "LUV"), stringsAsFactors=FALSE)
lst1 <- list(list(a), list(b))
lst2 <- list(list(c), list(d))
我会撒谎创建一个 lst3,其中 appends/joins 个字符包含在子列表 'a' 和 'c' 以及 'b' 和 'd' 中。
我想要的结果是:
lst3 <- list(list(data.frame(c("MA", "V", "UDR", "MO", "ABT", "XYZ", "Q"))), list(data.frame(c("MMM", "AAPL", "AA", "NEM", "LUV"))))
我认为下面的代码很接近,但我不太明白。
lst3 <- map(1:2, function(x) {
append(flatten(lst1[[x]]), flatten(lst2[[x]]))
})
我们可以使用Map
循环相应的list
元素,unlist
并创建一个嵌套的data.frame
Map(function(x, y) list(data.frame(col1 = c(unlist(x,
use.names = FALSE), unlist(y, use.names = FALSE)))),
lst1, lst2)
您还可以使用 purrr
中的 map2
map2(lst1, lst2, ~unname(c(unlist(.x), unlist(.y))))
# [[1]]
# [1] "MA" "V" "UDR" "MO" "ABT" "XYZ" "Q"
#
# [[2]]
# [1] "MMM" "AAPL" "AA" "NEM" "LUV"
我在 R 中有两个列表列表,我想加入一个列表列表并保留原始结构。考虑以下示例:
library(tidyverse)
library(dplyr)
library(purrr)
a <- data.frame(c("MA", "V", "UDR"), stringsAsFactors=FALSE)
b <- data.frame(c("MMM", "AAPL"), stringsAsFactors=FALSE)
c <- data.frame(c("MO", "ABT", "XYZ", "Q"), stringsAsFactors=FALSE)
d <- data.frame(c("AA", "NEM", "LUV"), stringsAsFactors=FALSE)
lst1 <- list(list(a), list(b))
lst2 <- list(list(c), list(d))
我会撒谎创建一个 lst3,其中 appends/joins 个字符包含在子列表 'a' 和 'c' 以及 'b' 和 'd' 中。
我想要的结果是:
lst3 <- list(list(data.frame(c("MA", "V", "UDR", "MO", "ABT", "XYZ", "Q"))), list(data.frame(c("MMM", "AAPL", "AA", "NEM", "LUV"))))
我认为下面的代码很接近,但我不太明白。
lst3 <- map(1:2, function(x) {
append(flatten(lst1[[x]]), flatten(lst2[[x]]))
})
我们可以使用Map
循环相应的list
元素,unlist
并创建一个嵌套的data.frame
Map(function(x, y) list(data.frame(col1 = c(unlist(x,
use.names = FALSE), unlist(y, use.names = FALSE)))),
lst1, lst2)
您还可以使用 purrr
map2
map2(lst1, lst2, ~unname(c(unlist(.x), unlist(.y))))
# [[1]]
# [1] "MA" "V" "UDR" "MO" "ABT" "XYZ" "Q"
#
# [[2]]
# [1] "MMM" "AAPL" "AA" "NEM" "LUV"