【问题标题】:Naming lists of different lengths / using purrr::modifylist to merge 2 lists together命名不同长度的列表 / 使用 purrr::modifylist 将 2 个列表合并在一起
【发布时间】:2022-07-26 21:39:40
【问题描述】:

我有 2 个数据框正在尝试使用 modifylist。但是,modifylist 只接受一个命名列表。在我的数据中,我有命名的“原始 - list_A”和我想要合并到 list_A 的“新 - list_B”。

  • 如果list_A 包含"Error" then list_B will contain the correct data, however, the lists are different sizes. (List_B

    修改列表(list_A, list_B)

不会修改列表,因为list_B 没有列表名称。

为了说明这一点;

list_C = list_B
names(list_C) = names(list_A)[1:6]

modifyList(list_A, list_C)

但这不起作用。

我想要做的是将 2 个列表合并在一起,给我一个大小为 7 的列表(就像在 list_A 中一样,但这次填充了 elm4elm6 以包含找到的数据框在list_B

最终列表应该只包含数据框。

数据:

# Named list
list_A = list(
  elm1 = data.frame(a = c("A1", "A2", "A3"), b = c("B1", "B2", "B3"), c = c("C1", "C2", "C3")),
  elm2 = data.frame(a = c("A11", "A22", "A33"), b = c("B11", "B22", "B33"), c = c("C11", "C22", "C33")),
  elm3 = data.frame(a = c("A111", "A222", "A333"), b = c("B111", "B222", "B333"), c = c("C111", "C222", "C333")),
  elm4 = as.character("Error"),
  elm5 = data.frame(a = c("A11111", "A22222", "A33333"), b = c("B11111", "B22222", "B33333"), c = c("C11111", "C22222", "C33333")),
  elm6 = as.character("Error"),
  elm7 = data.frame(a = c("A1111111", "A2222222", "A3333333"), b = c("B1111111", "B2222222", "B3333333"), c = c("C1111111", "C2222222", "C3333333"))
)

# Unnamed list of different length
list_B = list(
  NULL,
  NULL,
  NULL,
  data.frame(a = c("A1111", "A2222", "A3333"), b = c("B1111", "B2222", "B3333"), c = c("C1111", "C2222", "C3333")), # elm4
  NULL,
  data.frame(a = c("A111111", "A222222", "A333333"), b = c("B111111", "B222222", "B333333"), c = c("C111111", "C222222", "C333333")) # elm6
  # elm7 is missing since the list ends at the last data.frame in this list
  )

预期输出:

$elm1
   a  b  c
1 A1 B1 C1
2 A2 B2 C2
3 A3 B3 C3

$elm2
    a   b   c
1 A11 B11 C11
2 A22 B22 C22
3 A33 B33 C33

$elm3
     a    b    c
1 A111 B111 C111
2 A222 B222 C222
3 A333 B333 C333

$elm4
      a     b     c
1 A1111 B1111 C1111
2 A2222 B2222 C2222
3 A3333 B3333 C3333

$elm5
       a      b      c
1 A11111 B11111 C11111
2 A22222 B22222 C22222
3 A33333 B33333 C33333

$elm6
        a       b       c
1 A111111 B111111 C111111
2 A222222 B222222 C222222
3 A333333 B333333 C333333

$elm7
         a        b        c
1 A1111111 B1111111 C1111111
2 A2222222 B2222222 C2222222
3 A3333333 B3333333 C3333333

list(
  elm1 = data.frame(a = c("A1", "A2", "A3"), b = c("B1", "B2", "B3"), c = c("C1", "C2", "C3")),
  elm2 = data.frame(a = c("A11", "A22", "A33"), b = c("B11", "B22", "B33"), c = c("C11", "C22", "C33")),
  elm3 = data.frame(a = c("A111", "A222", "A333"), b = c("B111", "B222", "B333"), c = c("C111", "C222", "C333")),
  elm4 = data.frame(a = c("A1111", "A2222", "A3333"), b = c("B1111", "B2222", "B3333"), c = c("C1111", "C2222", "C3333")), # elm4
  #elm4 = as.character("Error"),
  elm5 = data.frame(a = c("A11111", "A22222", "A33333"), b = c("B11111", "B22222", "B33333"), c = c("C11111", "C22222", "C33333")),
  elm6 = data.frame(a = c("A111111", "A222222", "A333333"), b = c("B111111", "B222222", "B333333"), c = c("C111111", "C222222", "C333333")), # elm6
  #elm6 = as.character("Error"),
  elm7 = data.frame(a = c("A1111111", "A2222222", "A3333333"), b = c("B1111111", "B2222222", "B3333333"), c = c("C1111111", "C2222222", "C3333333"))
)

【问题讨论】:

    标签: r list dplyr purrr


    【解决方案1】:

    也许只是找到list_A 为“错误”的元素,并将它们分配给来自list_B 的元素?

    m <- which(list_A=="Error")
    list_A[m] <- list_B[m]
    

    【讨论】:

      猜你喜欢
      • 2020-02-24
      • 1970-01-01
      • 2017-11-30
      • 1970-01-01
      • 2017-12-04
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多