【发布时间】:2017-03-13 00:26:11
【问题描述】:
我想根据“示例”生成“重复”列。 003 是样品 ID,003r 是同一样品的复制品。 “Sample”列中的重复样本名称的前 3 个字符相同。
Sample <- c("001","002","003","003r","004","005","005r")
Value <- c(2,5,4,4,5,6,7)
Duplicate <- c(F,F,T,T,F,T,T)
df <- data.frame(Sample,Value,Duplicate)
df
Sample Value Duplicate
1 001 2 FALSE
2 002 5 FALSE
3 003 4 TRUE
4 003r 4 TRUE
5 004 5 FALSE
6 005 6 TRUE
7 005r 7 TRUE
我正在尝试使用ifelse 和grep,但无法以给我想要的结果的方式组合它们,我被困在这一点上。
非常感谢您的帮助,谢谢。
【问题讨论】:
-
你能多说一下数据吗:你感兴趣的总是前3个字符吗?您要检查重复的部分是否总是数字和变体字符?
-
您可以尝试
stringdist::stringdistmatrix(df$Sample),但不清楚为什么003r和003是骗子,而001和002却不是——这两对都只有一个字符距离。如果您要寻找的只是匹配前 3 个字符,您可以简单地执行duplicated(substring(df$Sample, 1, 3)) | duplicated(substring(df$Sample, 1, 3), fromLast = TRUE),它会提供您想要的输出。 -
@DavidArenburg 非常感谢,这就是我一直在寻找的东西,过了一会儿我也明白了它是如何工作的。