r - 从单个表中查找多列

假设我有以下数据

df <- structure(list(car_model = c(301, 302, 303, 304), colour = c(501, 
502, 503, 504), sales = c(182, 191, 302, 101)), row.names = c(NA, 
-4L), class = c("tbl_df", "tbl", "data.frame"))

我有一个查找表,我将在其中获取文本来替换 car_model 列中的代码和colour .

tbl1 <- structure(list(txt = c("A", "B", "C", "Y"), cod = c(301, 302, 
303, 304), var = c("car_model", "car_model", "car_model", "car_model"
)), row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame"
))
tbl2 <- structure(list(txt = c("black", "green", "red", "white"), cod = c(501, 
502, 503, 504), var = c("colour", "colour", "colour", "colour"
)), row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame"
))

结合我拥有的两个表

tbl <- rbind(tbl1,tbl2)
# A tibble: 8 x 3
  txt     cod var      
  <chr> <dbl> <chr>    
1 A       301 car_model
2 B       302 car_model
3 C       303 car_model
4 Y       304 car_model
5 black   501 colour   
6 green   502 colour   
7 red     503 colour   
8 white   504 colour   

有没有办法替换主df中的所有列以这种方式使用查找表(将列名与列 varcod 中的值匹配)或者我需要制作单独的表,每个变量一个表?我的另一个疑问是,在具有约 1000 万行、30 个或更多变量以及总大小约 5000 行的查找表的数据集中执行此操作是否合理。

编辑:关于代码,不同的变量中可能有相同的代码。

EDIT2:我正在寻找一种快速且内存高效的解决方案。也许有一些解决方案 data.table

最佳答案

data.table 选项

cbind(unstack(setDT(tbl)[melt(
  setDT(df)[, .(car_model, colour)], ,
  variable.name = "var",
  value.name = "cod"
), .(txt, var), on = .(var, cod)]), df[, .(sales)])

给出

  car_model colour sales
1         A  black   182
2         B  green   191
3         C    red   302
4         Y  white   101

https://stackoverflow.com/questions/67953198/

相关文章:

scala - 推特 future 封锁

vuejs3 - react 对象未在模板 Vue3 Composition API 上更新

javascript - 计算数组中每个元素的频率 - javascript

next.js - NextJS 将类从页面传递到布局组件

c - 分拣技术 C

javascript - Target 的 Toggled ClassList 上的 CSS Tra

html - 如何使整个 HTML 日期字段可点击?

xml - 同时迭代两个 for-each 循环

numpy - XGBoost:检查失败:有效:输入数据包含 `inf` 或 `nan`

sql - 有没有一种方法可以不使用 FOR 循环来创建虚拟记录?