我有一个由 4 个字母的所有可能组合组成的字符串数组 J, K, Q, Z
.数组中的条目至少由两个字母组成,最多由 4 个字母组成。例如:data<-c("QK", "KQ", "JKQZ", "KJZ")
.
我想计算数组中每个条目出现的次数,但不区分由相同字母但顺序不同的字符串。我知道 table(data)
不这样做,因为它没有想到 QK
和 KQ
一样并返回
data
JKQZ KJZ KQ QK
1 1 1 1
我一直在看
pmatch
或 charmatch
但这似乎并没有达到我想要的效果。编辑:我应该澄清一下,没有重复字母的条目。本质上,我不能有条目
ZZ
或 KZK
最佳答案
这是大卫评论/答案的更长变化:
vals <- sort(unique(unlist(strsplit(data,''))))
combos <- unlist(sapply(seq_along(vals),function(i)combn(vals,i,paste0,collapse="")))
newdata <- factor(sapply(strsplit(data,""),function(x)paste0(sort(x),collapse="")),
levels=combos)
tab <- table(newdata)
# newdata
# J K Q Z JK JQ JZ KQ KZ QZ JKQ JKZ JQZ KQZ JKQZ
# 0 0 0 0 0 0 0 2 0 0 0 1 0 0 1
tab[tab>0] # alternately
# KQ JKZ JKQZ
# 2 1 1
关于r - 匹配和计算 R 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30492690/