我有一个数据框:

levels     counts
1, 2, 2        24
1, 2           20
1, 3, 3, 3     15
1, 3           10
1, 2, 3        25

例如,我想将“1、2、2”和“1、2”视为同一个东西。因此,只要有一个“1”和“2”而没有任何其他字符,它将被视为级别“1、2”。这是所需的数据帧:
levels     counts
  1, 2         44
  1, 3         25
  1, 2, 3      25

这是用于重现原始数据帧的代码:
df <- data.frame(levels = c("1, 2, 2", "1, 2", "1, 3, 3, 3", "1, 3", "1, 2, 3"),
                 counts = c(24, 20, 15, 10, 25))
df$levels <- as.character(df$levels)

最佳答案

分割df$levels,获取唯一元素,然后对其进行排序。然后使用它来获取counts的集合。

df$levels2 = sapply(strsplit(df$levels, ", "), function(x)
    paste(sort(unique(x)), collapse = ", "))   #Or toString(sort(unique(x))))
aggregate(counts~levels2, df, sum)
#  levels2 counts
#1    1, 2     44
#2 1, 2, 3     25
#3    1, 3     25

关于r - 如何计算字符串中重复字符的实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45420364/

10-12 19:21