【发布时间】:2014-02-05 13:33:33
【问题描述】:
我正在尝试处理一些非常混乱的数据。我需要通过样本 ID 合并两个包含不同类型数据的大型数据框。问题是一个表的样本 ID 有许多不同的格式,但大多数都包含所需的 ID 字符串以匹配其 ID 中的某处,例如一个表中的样本“1234”在另一个表中的 ID 为“ProjectB(1234)”。
我做了一个最小的可重现示例。
a<-data.frame(aID=c("1234","4567","6789","3645"),aInfo=c("blue","green","goldenrod","cerulean"))
b<-data.frame(bID=c("4567","(1234)","6789","23645","63528973"), bInfo=c("apple","banana","kiwi","pomegranate","lychee"))
使用合并获得了一部分的方式:
merge(a,b, by.x="aID", by.y="bID", all=TRUE)
aID aInfo bInfo
1 1234 blue <NA>
2 3645 cerulean <NA>
3 4567 green apple
4 6789 goldenrod kiwi
5 (1234) <NA> banana
6 23645 <NA> pomegranate
7 63528973 <NA> lychee
但是会喜欢的输出基本上是:
ID aInfo bInfo
1 1234 blue banana
2 3645 cerulean pomegranate
3 4567 green apple
4 6789 goldenrod kiwi
5 63528973 <NA> lychee
我只是想知道是否有办法将 grep 合并到这个或其他 R-tastic 方法中?
提前致谢
【问题讨论】:
-
agrep是近似字符串匹配 -
示例:
b[ agrep('1234', b$bID), ]b[ agrep('3645', b$bID), ]都从b返回正确的 ID -
@rawr 你应该这样回答。
-
谢谢,我想我的问题是如何在两个数据帧的合并中使用这个agrep。
-
我可能会先清理数据。为原始、干净和合并的数据保留单独的文件。将您的代码分开。版本控制等都是很好的编程习惯:)