如何创建函数统计CSV列中P_1-P_4组变量的数字取值计数
功能需求
实现CSV文件列值数字计数功能,需编写符合以下规则的函数:
- 函数仅接收1个参数,参数取值为CSV文件中P_1、P_2、P_3、P_4四类变量组的组名
- 传入组名后,函数需统计该组包含的每一个变量(即对应CSV列)中,所有不同数字取值的出现次数
预期效果
调用count("P_1")时,返回结果格式示例如下:
## $P_1_1 ## ## 1 2 3 4 5 6 7 ## 89 32 508 142 15 281 36 ## ## $P_1_2 ## ## 1 2 3 4 5 6 ## 261 26 497 251 18 50 ## ## $P_1_3 ## ## 1 2 3 4 5 6 7 ## 114 26 308 443 77 126 9 ## ## $P_1_4 ## ## 1 2 3 4 5 6 7 ## 267 21 118 205 202 208 82 ## ## $P_1_5 ## ## 1 2 3 4 5 6 7 ## 144 46 282 387 33 154 57 ## ## $P_1_6 ## ## 1 2 3 4 5 6 7 ## 154 21 601 115 19 150 43
测试数据说明
用到的CSV文件为分号分隔格式,部分内容如下:
Lp.;P_1_1;P_1_2;P_1_3;P_1_4;P_1_5;P_1_6;P_2_1;P_2_2;P_3_1;P_3_2;P_4_1;P_4_2;P_4_3;P_4_4 1;3;4;4;4;3;3;1;7;7;7;1;3;5;7 2;3;1;1;5;3;3;1;4;6;4;1;5;3;4 3;3;2;3;4;2;7;1;6;6;6;5;3;4;4 4;3;3;4;4;3;4;1;5;6;6;3;3;5;5 5;3;1;4;7;3;3;3;6;5;7;5;5;2;2 6;3;4;1;4;3;3;1;6;7;7;7;4;7;5 7;3;1;1;5;3;7;1;4;6;6;4;1;6;1 8;3;4;6;1;1;1;1;3;6;6;5;1;2;3 9;3;4;4;4;3;3;1;5;6;6;5;3;5;4
实现代码(R语言)
从返回结果的列表格式可判断运行环境为R,直接使用以下代码即可实现需求:
count <- function(group) { # 读取CSV文件,将文件路径替换为本地实际路径即可 data <- read.csv("target_file.csv", sep = ";", check.names = FALSE) # 匹配目标组对应的所有列 group_cols <- grep(paste0("^", group, "_"), colnames(data), value = TRUE) # 逐列统计数字出现频数 result <- lapply(group_cols, function(col) table(data[[col]])) names(result) <- group_cols return(result) }
代码说明:
- 读取文件时指定分隔符为分号,和提供的CSV格式匹配
- 加
check.names = FALSE参数避免R自动修改原列名,保证列名匹配准确 - 用前缀正则匹配列,不会误抓其他组的同后缀字段
- 直接用内置
table函数做频数统计,输出格式和预期完全一致
内容的提问来源于stack exchange,提问作者Chmielu PL
相关产品推荐
相关产品推荐

