如何将CSV数据读入R变量以适配Mann-Whitney U检验?
解决Mann-Whitney U检验中CSV导入数据类型不匹配的问题
问题原因
你用read.csv()读取CSV文件后得到的是数据框(data.frame),而wilcox.test()要求输入必须是数值向量(numeric vector)——这就是报错'x' must be numeric的核心原因。直接用c()创建的变量是数值向量,所以能正常运行。
你的CSV文件是单行逗号分隔的数值(比如3,5,1,4,3,5),read.csv()会将其解析为1行多列的数据框,而非你需要的一维向量。
解决方案
方案1:用scan()直接读取为数值向量
scan()可以直接读取逗号分隔的数值并返回向量,是最直接的方法:
group1 <- scan("/Users/..../group1.csv", sep = ",") group2 <- scan("/Users/..../group2.csv", sep = ",")
方案2:将read.csv()读取的数据框转换为向量
如果坚持使用read.csv(),可以用unlist()将数据框转换为一维向量:
group1 <- unlist(read.csv("/Users/..../group1.csv", header = FALSE, colClasses = "integer", sep=",")) group2 <- unlist(read.csv("/Users/..../group2.csv", header = FALSE, colClasses = "integer", sep=","))
修改后的完整脚本
以scan()版本为例:
# 读取CSV为数值向量 group1 <- scan("/Users/..../group1.csv", sep = ",") group2 <- scan("/Users/..../group2.csv", sep = ",") # 执行Mann-Whitney U检验 test_result <- wilcox.test(group1, group2, exact = FALSE) # 输出检验结果 print(test_result) cat("U statistic:", test_result$statistic, "\n") cat("P-value:", test_result$p.value, "\n") # 计算合并数据的秩 combined_data <- c(group1, group2) ranks <- rank(combined_data) cat("Ranks:", ranks, "\n")
内容的提问来源于stack exchange,提问作者Morkus
相关产品推荐
相关产品推荐

