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

编写R函数:统计除含Text列外各列中整数值的出现频率

解决方案:统计数据框中指定列的纯整数值出现频率

实现思路

  1. 筛选出**列名不含"Text"**的所有列;
  2. 统一处理所有列,识别真正的纯整数值(排除NA、带格式的字符串如"21%"、非数字字符);
  3. 汇总所有符合条件的整数值的出现频率并排序。

函数代码

count_integer_frequencies <- function(df) {
  df %>%
    # 排除列名包含"Text"的列
    select(-contains("Text")) %>%
    # 转换为长格式,便于统一处理所有列的值
    pivot_longer(cols = everything(), names_to = "column", values_to = "value") %>%
    # 移除NA值
    drop_na(value) %>%
    # 判断是否为纯整数值:
    # - 数值类型:检查是否等于其整数形式(排除小数)
    # - 字符类型:用正则匹配纯数字(含正负),且转数值不失败(排除"21%"这类非纯数字)
    mutate(is_integer = case_when(
      is.numeric(value) ~ value == as.integer(value),
      is.character(value) ~ str_detect(value, "^-?\\d+$") & !is.na(as.numeric(value))
    )) %>%
    # 只保留纯整数值
    filter(is_integer) %>%
    # 转换为整数类型
    mutate(value = as.integer(value)) %>%
    # 统计每个整数的出现频率
    count(value, name = "frequency") %>%
    # 按频率降序排列
    arrange(desc(frequency))
}

测试示例数据

使用你提供的示例数据进行测试:

library(tidyverse)
df <-  tibble(Region = c("AU","USA",65,"USA","!UK",88,"USA","CA","!UK"),
              lock = c(26,18,NA,1,"Test",15,NA,"21%",13),
              type= c("sale",NA,NA,"target","target",NA,"sale",NA,"target"),
              state_Text=c("TX","CA","NY","OT","DE","WN","WA","PH","NJ"))

# 调用函数
count_integer_frequencies(df)

输出结果解释

运行后会得到如下结果(每个纯整数各出现1次):

# A tibble: 7 × 2
  value frequency
  <int>     <int>
1     1         1
2    13         1
3    15         1
4    18         1
5    26         1
6    65         1
7    88         1

关键细节说明

  • 列筛选:select(-contains("Text"))会自动排除所有列名中包含"Text"的列,无需手动指定;
  • 纯整数判断:兼顾数值型和字符型的情况,确保像65(数值)和"88"(字符纯数字)都能被识别,而"21%"、"Test"这类会被排除;
  • NA处理:用drop_na提前移除NA值,避免后续判断出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:25:16