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
(通过列中的值匹配列名var
和cod
)或者我需要制作单独的表,每个变量一个表?我的另一个疑问是,在具有约 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
推荐阅读
- multithreading - 事务范围 - “操作对事务状态无效”错误,每次都必须重新启动 DTC 服务
- indexing - 如何编写具有不同标准的 excel 索引匹配公式?
- git - 在 github 中需要 rebase 帮助
- html - 固定的css位置正在占用另一个div的边距
- c++ - 如何存储和调用变量参数函数和值向量?
- javascript - 在对象数组中使用条件将特定字符串添加到对象数据
- linux - curl命令设置权限和下载文件
- blockly - 我们如何以块状创建树视图工具箱,如图像中的任何示例代码或需要文档指南
- blazor - Blazor 服务器中的侧边栏
- python - 我改变了速度以制作破折号,但想在这里添加一些破折号长度限制