假设我有以下数据
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
https://stackoverflow.com/questions/67953198/