对一组的唯一元素的计数求和,并保留具有最高值的那个

Sum the counts of the unique elements of a group and keep the one with the highest value

我有一个大型数据集,如下所示

library(tidyverse)

df <- tibble(col1= c("a","a","k","k","k"), col2 = c("a1","a2","k1","k2","k3"),
             distance = c(1,1,1,1,1),
             count_col1=c(1,1,4,4,4), count_col2=c(3,4,1,1,1))
df
#> # A tibble: 5 × 5
#>   col1  col2  distance count_col1 count_col2
#>   <chr> <chr>    <dbl>      <dbl>      <dbl>
#> 1 a     a1           1          1          3
#> 2 a     a2           1          1          4
#> 3 k     k1           1          4          1
#> 4 k     k2           1          4          1
#> 5 k     k3           1          4          1

reprex package (v2.0.1)

于 2022-02-17 创建

这个数据集是比较字符串后得出的

a with a1
a with a2
k with k1
.....
k with k3

距离: 不应该起作用的列距离显示每对字符之间的列文斯坦距离。

count_col1: count_col1指的是col1中元素的个数, count_col2: count_col2指的是col2中元素的个数。

我根据 col1 对我的观察进行分组,然后我有两组: a组k组.

我要:

  1. 在每组中保留计数最高的元素, 也就是a组的a2,k组的k。

  2. 同时我想对每个组的每个唯一元素的计数求和。

我希望我的数据看起来像这样

 col     sum_counts
  a2      8 
  k       7

编辑:


组k中,值最大的元素为元素k。 我想将 k 组中的所有元素分组到 k 元素下,因为它的计数最高。 我不想多次计算元素 k。我只想数一次

k=4,然后我想添加其余唯一组成员的计数 即k1=1, k2=1, k3=1。 为此,总和为:sum = k + k1 + k2 + k3 总和=7

在a组中 计数最高的元素是元素 a2。 a2 = 4 的计数。 有两次 a,我不想数两次。 所以结果将是 a2 + a1 + a = 8

这看起来很奇怪,您不希望在输出中保留组,但是您可以:

library(dplyr)
df %>%
  group_by(col1) %>%
  summarize(
    col = if(max(count_col1) > max(count_col2)) {
      first(col1) 
    } else {
      col2[which.max(count_col2)]
    },
    sum_counts = sum(unique(count_col1), count_col2),
    .groups = "drop"
  ) %>%
  select(-col1)
# # A tibble: 2 × 2
#   col   sum_counts
#   <chr>      <dbl>
# 1 a2             8
# 2 k              7