【发布时间】:2019-03-05 09:00:21
【问题描述】:
我已经设法在 R 中使用循环进行 chisq-test,但是对于大数据来说它非常慢,我想知道你是否可以帮助我用 dplyr 之类的东西更快地完成它?我已经尝试过使用 dplyr,但我最终总是收到一个错误,我不确定原因。
这是我的数据的一个简短示例:
df
1 2 3 4 5
row_1 2260.810 2136.360 3213.750 3574.750 2383.520
row_2 328.050 496.608 184.862 383.408 151.450
row_3 974.544 812.508 1422.010 1307.510 1442.970
row_4 2526.900 826.197 1486.000 2846.630 1486.000
row_5 2300.130 2499.390 1698.760 1690.640 2338.640
row_6 280.980 752.516 277.292 146.398 317.990
row_7 874.159 794.792 1033.330 2383.420 748.868
row_8 437.560 379.278 263.665 674.671 557.739
row_9 1357.350 1641.520 1397.130 1443.840 1092.010
row_10 1749.280 1752.250 3377.870 1534.470 2026.970
cs
1 1 1 2 1 2 2 1 2 3
我想做的是在 df 和 cs 的每一行之间运行 chisq-test。然后给我统计数据和 p.values 以及行名。
这是我的循环代码:
value = matrix(nrow=ncol(df),ncol=3)
for (i in 1:ncol(df)) {
tst <- chisq.test(df[i,], cs)
value[i,1] <- tst$p.value
value[i,2] <- tst$statistic
value[i,3] <- rownames(df)[i]}
感谢您的帮助。
【问题讨论】:
-
索引不应该是
i in 1:nrow(df)吗?此外,我发现tbl对象没有做任何事情,而且您可以使用value[[3]] <- rownames(df)一次(在循环外)分配所有行名。dplyr函数通常不会使事情变得更快。它的目标是让事情更容易理解。
标签: r performance loops dplyr chi-squared