计数列表中的重复并将它们存储为倍数

Count repeats in a list and store them as a multiple

我有一个列表,它看起来像这样(ID 是列表中每个元素的名称,分数是值)。

问题是某些元素包含重复值。例如:对于ID = 8,得分为:1, 1, 2, 4.

我希望能够计算是否有重复并存储重复的次数。在这种情况下:1x2, 2, 4.

我试过:

str_count(patient.variants[[8]], "1")

但这只是 returns: 1, 1, 0, 0.

示例数据
list("1" = c("1", "2", "2"), "2" = c("1", "1", "2", "3"), "3" = c("1", "1", "2", "2"))

你可以试试

lapply(lst, \(x) {
  tab <- table(x)
  unname(ifelse(tab > 1, paste(names(tab), tab, sep = "x"), names(tab)))
})

# $`1`
# [1] "1"   "2x2"
# 
# $`2`
# [1] "1x2" "2"   "3"  
# 
# $`3`
# [1] "1x2" "2x2"

数据
lst <- list("1" = c("1", "2", "2"),
            "2" = c("1", "1", "2", "3"),
            "3" = c("1", "1", "2", "2"))

选项tapply

lapply(lst1, \(x) unname(tapply(x, x, FUN = function(x) 
   if(length(x) > 1) paste(x[1], length(x), sep = "X") else x)))
$`1`
[1] "1"   "2X2"

$`2`
[1] "1X2" "2"   "3"  

$`3`
[1] "1X2" "2X2"