gia*_*iac 2 r sequence hamming-distance dplyr
我想知道如何按组计算不匹配的情况.
让我们想象这是我的数据:
sek = rbind(c(1, 'a', 'a', 'a'),
c(1, 'a', 'a', 'a'),
c(2, 'b', 'b', 'b'),
c(2, 'c', 'b', 'b'))
colnames(sek) <- c('Group', paste('t', 1:3, sep = ''))
Run Code Online (Sandbox Code Playgroud)
数据看起来像这样
Group t1 t2 t3
[1,] "1" "a" "a" "a"
[2,] "1" "a" "a" "a"
[3,] "2" "b" "b" "b"
[4,] "2" "c" "b" "b"
Run Code Online (Sandbox Code Playgroud)
为了获得类似的东西
Group 1 : 0
Group 2 : 1
Run Code Online (Sandbox Code Playgroud)
使用stringdist库来计算它是很奇怪的.
就像是
seqdistgroupStr = function(x) stringdistmatrix(x, method = 'hamming')
sek %>%
as.data.frame() %>%
group_by(Group) %>%
seqdistgroupStr()
Run Code Online (Sandbox Code Playgroud)
但它没有用.
有任何想法吗 ?
快速更新:您如何解决权重问题?例如,如何在两个字符之间设置错误匹配时,如何传递参数 - 值(1,2,3,...).像失配之间b和c成本2而失配之间a和c成本1等.
这是另一种dplyr解决方案,不需要将数据转换为长/宽形式:
library(dplyr)
sek = rbind(c(1, 'a', 'a', 'a'),
c(1, 'a', 'a', 'a'),
c(2, 'b', 'b', 'b'),
c(2, 'c', 'b', 'b')) %>%
data.frame
colnames(sek) <- c('Group', paste('t', 1:3, sep = ''))
sek %>%
group_by(Group) %>%
distinct(t1, t2, t3) %>%
summarise(number_of_mismatches = n() - 1)
Run Code Online (Sandbox Code Playgroud)