r - 如何计算 R 中每列值的频率组合?
问题描述
在原始数据集中,我有 3k+ 行和 2 列 - id 和可以在实践中应用的语言。我的第一步是找到所选语言的频率组合。例如,有多少次 Python 与 R、SQL 一起被选择;或者 Java 被 JavaScript、C++ 等选择了多少次。
对 Stackoverflow 的一些研究帮助我找到了这些可能的模式。这是一些带有示例数据集的代码:
sample <- data.frame(id = rep(randomNames::randomNames(4), each = 4),
programming = c("R", "Python", "C#", "Other",
"R", "Tableu", "Assembler",
"Other", "Java", "JavaScript",
"Python", "C#","R", "Python", "C#",
"Other"))
gr <- sample %>%
group_by(id) %>%
arrange(programming) %>%
summarise(programming = paste(sort(unique(programming)), collapse = ", ")) %>%
count(programming)
但现在我想知道如何找到每种语言最频繁选择的数量。例如,R 语言很少与 Java 和 Kotlin 一起使用,这不是一个非常流行的设置。但是与 Python 和 SQL 一起选择的 R 更受欢迎。我的目的是找出哪些语言被选中的频率最高。
我也做了一些研究(例子),不幸的是,还没有找到解决方案。
我想我应该迭代我的programming
专栏以找到所有可能的选择(R + ...,Python + ...;然后是 R + Python + ...)。我尝试使用lapply
但在编写 lambda 函数时遇到了困难。
解决问题的可能方法是什么?是否有任何有效功能可用于此类目的?
解决方案
一种选择是在每种语言中创建语言组合id
以及count
最常一起出现的组合。.
library(dplyr)
sample %>%
group_by(id) %>%
summarise(programming = combn(sort(programming), 2,
paste0, collapse = '-'), .groups = 'drop') %>%
count(programming, sort = TRUE)
# programming n
# <chr> <int>
# 1 C#-Python 3
# 2 Other-R 3
# 3 C#-Other 2
# 4 C#-R 2
# 5 Other-Python 2
# 6 Python-R 2
# 7 Assembler-Other 1
# 8 Assembler-R 1
# 9 Assembler-Tableu 1
#10 C#-Java 1
#11 C#-JavaScript 1
#12 Java-JavaScript 1
#13 Java-Python 1
#14 JavaScript-Python 1
#15 Other-Tableu 1
#16 R-Tableu 1
推荐阅读
- reactjs - React:将 Screen.js 更改为 LandScape 方向
- angular - ag-grid - 将字符串过滤为数值而不更改数据类型
- c++ - 如何使用 typename 的类型?
- python - 当其他列具有某些值时查找 groupby 计数
- c# - 如何重新启用 Visual Studio 自动跨步通知?
- javascript - 当我在 nextjs 的 jsx 中使用 if 时,类名会感到困惑
- android - whereArrayContains 限制为 10
- linux - 这段代码是什么意思 make -s --eval
- java - java.lang.ArrayIndexOutOfBoundsException:长度=1;尝试读取 csv 时 index=1
- android - 如何在颤动中使用风味?