R 将相似的名称转换为数字
我有不同的基因型,比如他们的家族有很多父母R 将相似的名称转换为数字,r,excel,statistics,R,Excel,Statistics,我有不同的基因型,比如他们的家族有很多父母 genotypes parents G1 mac cemolt giza G2 mac miser G3 misr cemolt mac NE10 我有很多基因型,我想制作一个矩阵,其中包括每两个基因型之间的共同父母,所以看起来应该是 G1 G2 G3 G1 0 1 2 G2 2 如何执行此操作?下面是一个使用可复制代码和嵌套SAPPLY的intersect函数的解决方案 geno
genotypes parents
G1 mac cemolt giza
G2 mac miser
G3 misr cemolt mac NE10
我有很多基因型,我想制作一个矩阵,其中包括每两个基因型之间的共同父母,所以看起来应该是
G1 G2 G3
G1 0 1 2
G2 2
如何执行此操作?下面是一个使用可复制代码和嵌套SAPPLY的intersect函数的解决方案
genotypes <- c("G1", "G2", "G3")
parents <- list(c("mac", "cemolt", "giza"), c("mac", "miser"),
c("miser", "cemolt", "mac", "NE10"))
comparisons <- sapply(parents, function(x)
sapply(parents, function(y) length(intersect(x,y))))
rownames(comparisons) <- genotypes
colnames(comparisons) <- genotypes
as.dist(comparisons)
1生成数据帧:
df <- data.frame(genotypes = c("G1", "G2", "G3"),
parents = c("mac cemolt giza",
"mac miser",
"miser cemolt mac NE10"),
stringsAsFactors = FALSE)
commonParents <- function(vector1, vector2) {
lapply(1:length(vector1), function(x) {
if(vector1[x] == vector2[x]) {
return(0)
} else {
parents <- unlist(strsplit(vector1[x], split = " "))
sum(sapply(parents, function(y) grepl(y, vector2[x], ignore.case = TRUE)))
}
})
}
outer(df$parents, df$parents, FUN = "commonParents")