根据存储在另一个数据框中的变量名称获取对应的值?

问题描述 投票:0回答:1

在一个小标题中,我的值是另一个小标题中的变量名称。 我需要快速列出第一个小标题的每一行中包含的列名称的第二个小标题中特定行中的值。我该怎么办?

我的数据具有以下形式:

# Observations in is tibble says which variables of the tibble_b occurred at each case:
tibble_a <- tribble(
        ~a, ~b, ~c,
         4,  2,  5,
         4,  3,  1,
         2,  5,  5
        )
# This tibble contains values for the variables at different times:
tibble_b <- tribble(
        ~`1`, ~`2`, ~`3`, ~`4`, ~`5`,
         100,  112,   98,  107,   85,
          71,   76,   97,   80,   15,
           2,   61,   54,   37,   42
         )

我需要创建一个小标题,其中包含

tibble_b
中第一个数字的值,比方说,第一行,对于
tibble_a
中的所有行。也就是说,基本上,要获取此表格数据:

a b c
107 112 85
107 98 100
112 85 85

我的问题是,

tibble_a
有数十万行,当然,两者都有更多列。由于我必须对
tibble_b
的行索引的多个样本进行测试和比较,因此使用
for(current_row in 1:nrow(tibble_a)) { for(current_col in 1:3) tibble_of_results[[current_row, current_col]] <- tibble_b[[1, tibble_a[[current_row, current_col]]]] }
之类的东西非常耗时。

有人可以建议任何有效的方法来完成这项任务吗?

r tibble
1个回答
0
投票

这是使用

purrr
包的函数式编程方法:

fetch_values <- function(row) {
  map_dbl(tibble_a[row, ], ~tibble_b[[1, .x]])
}

map_dfr(seq_len(nrow(tibble_a)), fetch_values)

 A tibble: 3 × 3
      a     b     c
  <dbl> <dbl> <dbl>
1   107   112    85
2   107    98   100
3   112    85    85
© www.soinside.com 2019 - 2024. All rights reserved.