r - 在行内的顺序中调整很少的频率来计算频率

我想计算给定行中可能具有不同顺序的实例的出现次数。

df:
Col1
A;B;C
C;B;A
A;D
A;C;B
D;A
D;C

df_result:
Col    freq
A;B;C   3
A;D     2
D;C     1

最佳答案

处拆分列,循环遍历list排序粘贴元素,得到table 中的频率计数并转换为 base R

中的 data.frame
as.data.frame(table(sapply(strsplit(df$Col1, ";"), \(x) 
      paste(sort(x), collapse = ";"))))

-输出

   Var1 Freq
1 A;B;C    3
2   A;D    2
3   C;D    1

或者在 tidyverse 中使用 separate_rowscount

library(dplyr)
library(tidyr)
library(stringr)
df %>%
  mutate(rn = row_number()) %>%
  separate_rows(Col1) %>% 
  group_by(rn) %>% 
  summarise(Col1 = str_c(sort(Col1), collapse = ";")) %>% 
  count(Col1, name = 'Freq')
# A tibble: 3 × 2
  Col1   Freq
  <chr> <int>
1 A;B;C     3
2 A;D       2
3 C;D       1

数据

df <- structure(list(Col1 = c("A;B;C", "C;B;A", "A;D", "A;C;B", "D;A", 
"D;C")), class = "data.frame", row.names = c(NA, -6L))

https://stackoverflow.com/questions/72971126/

相关文章:

r - 如何制作渐变彩虹调色板图?

r - 如何用 NA、na_if、if_else、regex 替换某些字符串

python - 在具有列表作为值的 python 字典中查找最低值或最少的项目

html - 在响应图像上放置和缩放文本

regex - 如何从文件中提取一行中存在的所有 IP 地址?

windows - 在 3 个不同的子目录中创建 2 个子目录

api - 概念 api 缺少属性值

javascript - 尝试在 Mobile Safari 上调试 Javascript 但当 i

c - 这两个初始化是等价的吗?

javascript - 我怎样才能从传递给 `String.prototype.replace`