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

在R中统计任意两列中各值出现的行数

解决方法

要统计每个值出现在多少不同行中(同一行内重复值只算一次),你可以用dplyr结合tidyr来处理,核心思路是先转换数据格式,再去重计数:

library(dplyr)
library(tidyr)

data <- read.csv(text = "foo,bar
a,b
a,a
b,c
c,a
c,b")

result <- data %>%
  # 给每行添加唯一标识,用于区分不同行
  mutate(row_id = row_number()) %>%
  # 将宽格式转为长格式,把两列的数值合并到同一列
  pivot_longer(cols = c(foo, bar), names_to = "col", values_to = "Value") %>%
  # 同一行内的相同值只保留一条,避免重复计数
  distinct(row_id, Value) %>%
  # 统计每个值对应的行数
  count(Value, name = "Count")

print(result)

运行后输出:

# A tibble: 3 × 2
  Value Count
  <chr> <int>
1 a         3
2 b         3
3 c         3

关键步骤说明

  • mutate(row_id = row_number()):生成每行的唯一ID,用来追踪每个值所属的原始行。
  • pivot_longer:把原来的两列数据整合为一列,让每个值都和对应的行ID关联。
  • distinct(row_id, Value):去除同一行内重复的数值,确保一行不管有多少个相同值,都只被计数一次。
  • count(Value, name = "Count"):按值分组,统计每个值对应的唯一行的数量。

如果不用tidyverse,也可以用基础R实现:

# 基础R方案
# 提取每行的唯一值
row_unique_vals <- apply(data, 1, unique)
# 展开并统计每个值出现的行数
count_table <- table(unlist(row_unique_vals))
# 转换为数据框
as.data.frame(count_table, responseName = "Count")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:52:10