You need to enable JavaScript to run this app. R语言dataframe多character列取值共现次数的统计方法
优惠活动
大模型
产品
解决方案
定价
更多

R语言dataframe多character列取值共现次数的统计方法

可直接运行的统计实现方案

前置处理

先从原始数据中筛出需要纳入统计的5个character类分类列,排除ID、card这类标识性的非统计列:

target_cols <- c("curf", "mas", "vac", "scho", "alco")
df_sub <- d[, target_cols]

基于tidyverse的实现(适配当前tibble数据结构)

逐列配对统计取值共同出现的次数,输出格式完全匹配目标长表结构:

library(tidyverse)

# 生成所有非重复的列对组合,避免重复统计(比如不同时计算curf-mas、mas-curf这类反向重复对)
col_pairs <- combn(names(df_sub), 2, simplify = FALSE)

# 逐列对完成计数
final_result <- map_dfr(col_pairs, function(pair) {
  # 生成两列所有取值的笛卡尔组合,保证未共同出现过的取值对也能被输出(计数为0)
  expand_grid(
    col1 = unique(df_sub[[pair[1]]]),
    col2 = unique(df_sub[[pair[2]]])
  ) %>% 
    mutate(
      No_of_Occurence = map2_int(col1, col2, function(val1, val2) {
        # 逐行匹配两列取值,统计满足条件的总行数
        sum(df_sub[[pair[1]]] == val1 & df_sub[[pair[2]]] == val2)
      })
    )
})

跑通后输出的前几行和目标格式完全对齐:

col1  col2     No_of_Occurence
c11   m2_indo   4
c12   m2_indo   4
c08   m2_indo   0
c11   m3_every  0
c12   m3_every  0
c08   m3_every  2
c11   v_100     4
c12   v_100     0
c08   v_100     2
...
s_50   a2_thu    4

基础R版本实现(无需安装第三方包)

不加载额外依赖,用基础函数即可完成相同计算:

col_pairs <- combn(names(df_sub), 2, simplify = FALSE)
final_result <- data.frame(col1 = character(), col2 = character(), No_of_Occurence = integer())

for(pair in col_pairs) {
  val_set1 <- unique(df_sub[[pair[1]]])
  val_set2 <- unique(df_sub[[pair[2]]])
  pair_grid <- expand.grid(col1 = val_set1, col2 = val_set2, stringsAsFactors = FALSE)
  
  pair_grid$No_of_Occurence <- mapply(function(v1, v2) {
    sum(df_sub[[pair[1]]] == v1 & df_sub[[pair[2]]] == v2)
  }, pair_grid$col1, pair_grid$col2)
  
  final_result <- rbind(final_result, pair_grid)
}

可选调整

  • 若不需要保留计数为0的未出现组合,在结果生成后加一行过滤即可:final_result <- final_result[final_result$No_of_Occurence > 0, ]
  • 若需要统计所有列的反向配对(比如同时算curf-vac和vac-curf),给生成的列对追加反向版本再跑统计逻辑即可。

内容的提问来源于stack exchange,提问作者djourd1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 13:45:04