我正在处理大数据,我想用grep替换列值。
这是一个简单的例子:
data=data.frame(state=c("AlAbama","Alaaska","Arizoona"),
gender=c("male","female","female"))
datalist=data.frame(state=c("Alabama","Alaska","Arizona"))
在名为“data”的数据中,我的状态名称以错误的方式写入,我想用datalist中的写入名称替换它们。 因此,我想使用grep。
将“data”中的列值替换为“datalist”中的列值我试过这个:
data[grep(data[,"state"],datalist[,"state"])]
而且:
for (u in datalist$state){
data[grep(u,datalist$state)]
}
但它不起作用。
您对如何解决此问题有任何想法吗?
真诚的,你的, 家人在一起
答案 0 :(得分:0)
有多种方法可以解决这个问题,但根据您想要的清洁方式,这可能会非常耗时。
首先,grep只替换一组字符。所以只有你有重复模式发生才行。例如,如果所有“a”都加倍,则可以使用grep将“aa”替换为“a”。
如果以错误的方式输入的状态数量有限,则可以手动创建一个查找表,其中包含与正确值关联的错误值,只需进行合并即可。或者为每个以错误方式输入的状态执行grep步骤,但它会更长。
如果要清理大量模式,可以使用open refine,它具有一半的手动群集功能和不同的指标,可以轻松地对您的状态进行聚类。
答案 1 :(得分:0)
快速尝试作为答案。
library(stringdist)
data1 <- data.frame(
state = c("AlAbama", "Alaaska", "Arizoona", "NY"),
gender = c("male", "female", "female", "unkn")
)
datalist <- data.frame(state = c("Arizona", "Alabama", "Alaska"))
dist_m <- data.frame(stringdistmatrix(data1$state, datalist$state))
dist_m$minID <- apply(dist_m, 1, which.min)
data1$state2 <- datalist$state[dist_m$minID]
结果:
state gender state2
1 AlAbama male Alabama
2 Alaaska female Alaska
3 Arizoona female Arizona
4 NY unkn Alaska
当然,你需要小心这一点,但作为临时解决方案应该没问题。
您还应该阅读method
函数的weight
和stringdist
参数。