我有一个非常大的数据框,其中包含一个邮政编码:
data <- data.frame(data = rnorm(n = 4),
code = c("1001", "1130", "2001", "9010"),
stringsAsFactors = F)
我还有第二个大型数据框,其中邮政编码模式映射到一个区域。
mapping <- data.frame(code = c("10*", "20*"),
zone = c("zone1", "zone2"),
stringsAsFactors = F)
我想加入这两个表以将zone
列添加到data
数据框中,但是数据量太大,无法执行“行式” grepl。最有效的方法是什么?
处理大型物体的最有效方法是data.table
。要进行联接,两个对象都需要一个公共列。我substr
用来获取data
对象中代码列的前两位。另请注意,我从中删除了“ *”,mapping
因为该字符在中不存在data
。
library(data.table)
setDT(data)
setDT(mapping)
data[, code := substr(code, start = 1, stop = 2)]
mapping[data, on="code"]
code zone data
1: 10 zone1 -1.0481912
2: 11 <NA> 1.1339476
3: 20 zone2 -0.8072921
4: 90 <NA> 1.5883562
数据
data <- data.frame(data = rnorm(n = 4),
code = c("1001", "1130", "2001", "9010"),
stringsAsFactors = F)
mapping <- data.frame(code = c("10", "20"),
zone = c("zone1", "zone2"),
stringsAsFactors = F)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句