R - 按组计算不匹配

标签 r sequence dplyr hamming-distance

我想知道如何按组计算不匹配个案。

让我们想象这是我的数据:

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 = ''))

数据是这样的

     Group t1  t2  t3 
[1,] "1"   "a" "a" "a"
[2,] "1"   "a" "a" "a"
[3,] "2"   "b" "b" "b"
[4,] "2"   "c" "b" "b"

为了得到类似的东西

Group 1 : 0 
Group 2 : 1 

最好使用 stringdist 库来计算它。

有点像

seqdistgroupStr = function(x) stringdistmatrix(x, method = 'hamming')

sek %>% 
  as.data.frame() %>% 
  group_by(Group) %>% 
  seqdistgroupStr() 

但它不起作用。

有什么想法吗?

快速更新: 你会如何解决权重问题?例如,在设置两个字符之间的 mistmatch 时,我如何传递一个参数 - 一个值 (1,2,3, ...)。就像 b 和 c 之间的不匹配 成本 2a 和 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)

关于R - 按组计算不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31281125/

相关文章:

R 将季度更改为时间戳

oracle - 在表中添加和删除时使用序列

r - 创建不同长度的序列序列

r - 如何在R中编写一个重新编码多个变量的for循环?

r - 使用 rle 消除第一个和最后一个序列

reshape 数据框 R : Some variables wide to long format, 一些长到宽

r - 使用 spread() 将日期时间转换为列名

r - 从 R 中的循环创建向量

scala - 将流参数转发给另一个函数的函数保留引用

r 用填充的数据扩展数据集