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

如何从现有DataFrame生成包含唯一值计数的新DataFrame

统计DataFrame各列中唯一值的出现次数

方法一:使用tidyverse工具链

这是贴合tidy数据理念的实现方式,步骤清晰易读:

library(tidyverse)

# 构造示例数据(替换为你的DataFrame即可)
DF <- tibble(
  column1 = c(0, 0.5, 1, 1, 0, 0, 0, 0.4),
  column2 = c(0, 0.5, 1, 1, 0, 0.75, 0, 0.4),
  column3 = c(0.5, 0.5, 0.3, 1, 0.3, 0, 0, 0.4),
  column4 = c(1, 1, 0.3, 1, 0.3, 0.3, 0, 0.4)
)

# 生成目标统计结果
DF_count <- DF %>%
  # 宽格式转长格式,统一处理所有列的数值
  pivot_longer(everything(), names_to = "column", values_to = "value") %>%
  # 按列名和数值分组,统计出现次数
  count(column, value) %>%
  # 转回宽格式,缺失数值对应的次数填0
  pivot_wider(names_from = column, values_from = n, values_fill = 0) %>%
  # 重命名第一列为要求的名称
  rename(column_unique = value) %>%
  # 按唯一值排序,和示例结果对齐
  arrange(column_unique)

# 查看结果
DF_count

方法二:使用base R(无需额外包)

如果不想依赖tidyverse,用base R原生函数也能实现:

# 构造示例数据
DF <- data.frame(
  column1 = c(0, 0.5, 1, 1, 0, 0, 0, 0.4),
  column2 = c(0, 0.5, 1, 1, 0, 0.75, 0, 0.4),
  column3 = c(0.5, 0.5, 0.3, 1, 0.3, 0, 0, 0.4),
  column4 = c(1, 1, 0.3, 1, 0.3, 0.3, 0, 0.4)
)

# 获取所有列的唯一值并排序
all_unique_values <- sort(unique(unlist(DF)))

# 遍历每一列,统计每个唯一值的出现次数
column_counts <- lapply(DF, function(col) {
  # 统计当前列的数值频率
  freq_table <- table(col)
  # 匹配所有唯一值,未出现的填0
  sapply(all_unique_values, function(val) {
    ifelse(as.character(val) %in% names(freq_table), freq_table[as.character(val)], 0)
  })
})

# 组合成目标DataFrame
DF_count <- data.frame(
  column_unique = all_unique_values,
  do.call(cbind, column_counts)
)

# 查看结果
DF_count

内容的提问来源于stack exchange,提问作者Anders Jørgensen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:53:42