Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用R在Tableau中复制Excel chisq.test函数_R_Excel_Tableau Api_Chi Squared - Fatal编程技术网

用R在Tableau中复制Excel chisq.test函数

用R在Tableau中复制Excel chisq.test函数,r,excel,tableau-api,chi-squared,R,Excel,Tableau Api,Chi Squared,我正在努力通过R在Tableau中进行chisq.test测试。我在Excel中有一个模型,我必须复制它,但我的结果不同。我认为问题在于R代码中数据的正确处理 以下是Excel值: Excel中的p值公式为:CHISQ.TEST(F4:G4,H4:I4) 这是Tableau的外观: 表中p值公式为: SCRIPT_REAL(" obs_yes = .arg1; obs_no = .arg2; exp_yes = .arg3; exp_no = .arg4; df1 <- data.f

我正在努力通过R在Tableau中进行chisq.test测试。我在Excel中有一个模型,我必须复制它,但我的结果不同。我认为问题在于R代码中数据的正确处理

以下是Excel值:

Excel中的p值公式为:CHISQ.TEST(F4:G4,H4:I4)

这是Tableau的外观:

表中p值公式为:

SCRIPT_REAL("
obs_yes = .arg1;
obs_no = .arg2;
exp_yes = .arg3;
exp_no = .arg4;

df1 <- data.frame(obs_yes,obs_no);
df2 <- data.frame(exp_yes,exp_no);

print('df1 is ');
print(df1);
print('df2 is ');
print(df2);

if ( !is.na(obs_yes) && !is.na(obs_no) && !is.na(exp_yes) && !is.na(exp_no)) {
    #ChiSq = chisq.test(c(df1[8,1],df1[8,2]), p=c(df2[8,1],df2[8,2]), rescale.p=TRUE);
    ChiSq = chisq.test(df1, p=df2, rescale.p=TRUE);
    ChiSq$p.value;
} else {
    {NaN};
}
"
,[obs_yes],[obs_no],[exp_yes],[exp_no])

但这没有帮助,因为这是一个静态计算

有什么想法吗

下面是一个指向.twbx文件的链接

谢谢,

阿德里安

另外,论坛上的一个工作代码(用于不同的设置)如下所示,但我不知道如何根据我的情况调整它

SCRIPT_REAL(
'mm <- data.frame(commodity = .arg1);
d <- split(mm,rep(1:.arg3[1],each=.arg2[1]/.arg3[1]));
zt <-do.call?do.c(cbind, d);chisq.test(zt)$p.value'
,SUM([Number of Records]), SIZE(),[Priorities])
SCRIPT\u REAL(

“嗯我从中得到灵感解决了这个问题

问题是R计算应该“吐出”一个值向量,而不是一个值

以下是解决方案,以防有人需要:

SCRIPT_REAL("
obs_yes = .arg1;
obs_no = .arg2;
exp_yes = .arg3;
exp_no = .arg4;

if ( !is.na(obs_yes) && !is.na(obs_no) && !is.na(exp_yes) && !is.na(exp_no)) {
    out <- rep(NA,length(obs_yes));
    for(i in 1:length(obs_yes)) {
        out[i] <- chisq.test(c(obs_yes[i],obs_no[i]), p=c(exp_yes[i],exp_no[i]), rescale.p=TRUE)$p.value;
    }
    out
} else {
    {NaN};
}
"
,[obs_yes],[obs_no],[exp_yes],[exp_no])
SCRIPT\u REAL(“
obs_yes=.arg1;
obs_编号=.arg2;
exp_yes=.arg3;
exp_no=.arg4;
如果(!is.na(obs_yes)&&&!is.na(obs_no)&&!is.na(exp_yes)&&!is.na(exp_no)){

你的卡方值可能不匹配的一个原因是因为R在p值上加了一个正确的值,但更多的是与你的问题有关为什么不使用Tableau来计算p值:Mike,如果我只计算R脚本中的一行,我的值匹配。问题是如何使R脚本返回每行的p值。
SCRIPT_REAL("
obs_yes = .arg1;
obs_no = .arg2;
exp_yes = .arg3;
exp_no = .arg4;

if ( !is.na(obs_yes) && !is.na(obs_no) && !is.na(exp_yes) && !is.na(exp_no)) {
    out <- rep(NA,length(obs_yes));
    for(i in 1:length(obs_yes)) {
        out[i] <- chisq.test(c(obs_yes[i],obs_no[i]), p=c(exp_yes[i],exp_no[i]), rescale.p=TRUE)$p.value;
    }
    out
} else {
    {NaN};
}
"
,[obs_yes],[obs_no],[exp_yes],[exp_no])