对一组的唯一元素的计数求和,并保留具有最高值的那个
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组.
我要:
在每组中保留计数最高的元素,
也就是a组的a2,k组的k。
同时我想对每个组的每个唯一元素的计数求和。
我希望我的数据看起来像这样
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
我有一个大型数据集,如下所示
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组.
我要:
在每组中保留计数最高的元素, 也就是a组的a2,k组的k。
同时我想对每个组的每个唯一元素的计数求和。
我希望我的数据看起来像这样
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