最初的任务
我想对data.frame
的所有列执行卡方检验,然后仅显示最重要的结果(p.value <= 0.05
)。第一列为x
,其他所有列均为y
。这是代码:
y <- 2
for(y in y:ncol(data)){
chisq_result <- chisq.test(x = data[,1], y = data[,y]);
if(chisq_result$p.value <= 0.05){
print(chisq_result);
}
}
问题
Pearson's Chi-squared test
data: data[, 1] and data[, y]
X-squared = 11.166, df = 2, p-value = 0.003761
如您所见,第二行显示data[, y]
,它应为data[, 4]
(或其他列号)。换句话说,我无法在y
输出中显示chisq.test
变量的值。
为什么我要这个?因为我在data.frame
中有几个列进行了几次卡方检验并且没有任何参考,有时很难知道哪个列与该输出或其他列相关。
临时解决方法
我尝试了与get()
,eval()
,parse()
或do.call()
不同的内容,但似乎没有任何效果。目前,我刚刚添加cat("X = ", colnames(data)[x], " Y = ", colnames(data)[y], "\n");
作为条件任务,以获取变量的名称:
y <- 2
for(y in y:ncol(data)){
chisq_result <- chisq.test(x = data[,1], y = data[,y]);
if(chisq_result$p.value <= 0.05){
cat("X = ", colnames(data)[x], " Y = ", colnames(data)[y], "\n");
print(chisq_result);
}
}
...它提供了更多可用的东西(参见第1行),但不满意,因为我仍然得到变量名y
而不是值4
(第3行):
X = colname1 Y = colname4
Pearson's Chi-squared test
data: data[, 1] and data[, y]
X-squared = 11.166, df = 2, p-value = 0.003761
解决方案
感谢RomanLuštrik,我使用sprintf()
直接编辑data.name内容。这是新代码:
y <- 2
for(y in y:ncol(data)){
chisq_result <- chisq.test(x = data[,1], y = data[,y]);
if(chisq_result$p.value <= 0.05){
chisq_result$data.name <- sprintf("col %s and col %s", x, y);
print(chisq_result);
}
}
给出了:
Pearson's Chi-squared test
data: col 5 and col 8
X-squared = 11.166, df = 2, p-value = 0.003761
答案 0 :(得分:0)
我认为您的解决方法没有任何问题。这是另一个,通过替换chisq.test
打印对象中的相关数据。
xy <- data.frame(var1 = sample(50:100, size = 20),
var2 = sample(100, 150, size = 20))
x <- chisq.test(x = xy[, 1], y = xy[, 2])
x$data.name <- "something pretty from 1 and 2"
x
Pearson's Chi-squared test
data: something pretty from 1 and 2
X-squared = 340, df = 323, p-value = 0.2471