在一个Tibble中,我的值是另一个Tibble中的变量名. 我需要快速列出第一个Tibble的每一行中包含的列名的第二个Tibble中特定行中的值.我该怎么做呢?

我的数据格式如下:

# 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,它包含第一个数字的值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]]]] 
  }
}

有没有人能建议一些有效的方法来完成这项任务?

推荐答案

library(dplyr)

tibble_a |>
  mutate(across(everything(), \(x) unlist(tibble_b[1, x], use.names = F)))
#       a     b     c
#   <dbl> <dbl> <dbl>
# 1   107   112    85
# 2   107    98   100
# 3   112    85    85

您可以使用列的值作为列索引tibble_b.例如,对于tibble_a[[1]]:

tibble_b[1, c(4, 4, 2)]
#     `4`   `4`   `2`
#   <dbl> <dbl> <dbl>
# 1   107   107   112

然后,我们只需使用unlist将其转换为向量.然后,我们可以将此方法应用于使用across(everything(), ...)的所有列.

R相关问答推荐

在R中列表的结尾添加数字载体

从gtsummary包中使用tBL_strata()和tBL_summary()时删除变量标签

多重RHS固定估计

Highcharter多次钻取不起作用,使用不同方法

R函数‘paste`正在颠倒其参数的顺序

2个Rscript.exe可执行文件有什么区别?

线性模型斜率在减少原始数据时提供NA

以NA为通配符的R中的FULL_JOIN以匹配其他数据中的任何值.Frame

如何使用同比折线图中的个别日

将多个变量组合成宽格式

R中Gamma回归模型均方误差的两种计算方法不一致

优化从每个面的栅格中提取值

如何在使用因子时获得Sankey图的Scale_Fill_Viridis的全范围

计算来自单独分组的分幅的值的百分位数

每行不同列上的行求和

使用其他DF中的文件名将列表中的每个元素保存到文件中

R中从因数到数字的转换

如何捕获这个shiny 的、可扩展的react 性用户输入矩阵作为另一个react 性对象,以便进一步操作?

识别部分重复行,其中一行为NA,其重复行为非NA

将y轴格式更改为R中的百分比