在R中用grep替换列值

时间:2016-05-11 08:23:18

标签: r grep

我正在处理大数据,我想用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)]
}

但它不起作用。

您对如何解决此问题有任何想法吗?

真诚的,你的, 家人在一起

2 个答案:

答案 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函数的weightstringdist参数。