r - 将数据框和列表连接到包含列表列的数据框中

标签 r list dataframe

我想将一个数据框与一个 id 列和一个基于列表名称的列表(包含不同的 id 值)合并。举个例子:

g <- data.frame(id = c("a1", "b2"), k = c(4, 5))
h <- list(a1 = list(
  p = c(1, 2, 3),
  l = c("A", "B", "C"),
  data = mtcars
),
b2 = list(
  p = c(5, 6, 7),
  l = c("M", "N", "O"),
  data = iris
))

如何将 g 和 h(基于 g$id 和 h 的名称)合并到数据帧 g2 中,除了 h 之外还包含 id 和 k 列作为列表列:

# A tibble: 2 × 3
     id                  h       k
  <fctr>              <list> <dbl>
1      a1     <tibble [3*1]>     4
2      b2     <tibble [3*1]>     5

@Steven Beaupré 的回答非常有用。我冒昧地将列表转换为 tibble 方法到函数中,以防其他人需要它。

library(tidyverse)
cnv_list_tibble <- function(ls) {
  as_tibble(ls) %>%
    gather(id, data) %>%
    nest(.,-id)
}

瞧,您有一个可用于后续合并/加入的列表列。

最佳答案

你可以尝试:

library(tidyr)
library(dplyr)
library(tibble)

as_tibble(h) %>% 
  gather(id, data) %>%
  group_by(id) %>%
  do(h = as_tibble(.[-1])) %>%
  left_join(., g)

这给出:

#Joining, by = "id"
#Source: local data frame [2 x 3]
#Groups: <by row>
#
## A tibble: 2 × 3
#     id                h     k
#  <chr>           <list> <dbl>
#1    a1 <tibble [3 × 1]>     4
#2    b2 <tibble [3 × 1]>     5

或者使用purrr:

library(purrr)

as_tibble(h) %>%
  gather(id, data) %>%
  slice_rows("id") %>%
  by_slice(~as_tibble(.), .to = "h") %>%
  left_join(., g)

关于r - 将数据框和列表连接到包含列表列的数据框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40112625/

相关文章:

r - 将 tex 分布添加到 R studio 的 PATH

python - 确定分组数据框中值的变化

python - Pandas读取html表到dataframe无法打印

r - 没有足够的水平空间来显示频率

javascript - 打印 Shiny 条件面板中使用的 JavaScript 条件

python - 从 Pandas 数据框列或行中获取列表?

python - 按属性 ip 对类实例列表进行排序

r - 在 R 中数据框的每一列之间插入一个空列

r - 缩放不同尺寸的热图

python - 检查字符串的任何字符是否在列表中