You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计data.frame各单元格分号分隔词频次并生成计数表(NA计为0)

问题描述

现有一个包含5803个观测值、23个变量的data.frame,部分数据如下:

ClustersRepresentativeGenome1Genome2GenomeX
1Gene family 1Locus1;Locus2;Locus3Locus1;Locus2Locus1
2Gene family 1Locus2;Locus3Locus2;Locus3(空白)

需要将其转换为计数表,统计每个单元格中以分号分隔的条目数量,空白/NA计为0,期望输出如下:

ClustersRepresentativeGenome1Genome2GenomeX
1Gene family 1321
2Gene family 1220

解决方案(R语言)

针对这类分号分隔的计数需求,提供两种实现方式:

方法1:dplyr + stringr 简洁版

library(dplyr)
library(stringr)

# 假设数据框名为df,处理所有以Genome开头的列
df_count <- df %>%
  mutate(across(starts_with("Genome"), 
                ~ ifelse(is.na(.) | . == "", 0, str_count(., ";") + 1)))

方法2:Base R 原生实现(无需额外包)

# 筛选出所有以Genome命名的列
genome_cols <- grep("^Genome", names(df), value = TRUE)

# 批量处理每一列:空白/NA设为0,非空值统计分号分隔的条目数
df[genome_cols] <- lapply(df[genome_cols], function(x) {
  ifelse(is.na(x) | x == "", 0, lengths(strsplit(x, ";")))
})

逻辑说明

  • 空白或NA值直接替换为0;
  • 非空单元格中,分号的数量比条目数少1,所以用分号数量+1或者strsplit后取长度来得到条目总数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:54:29