错误:是否在每列的R中循环?
我有一些数据,并试图做分析。我不知道如何使用R,但我在网上看了一些视频,并试图模仿我需要的相同测试。我想做的是尝试比较前四(1-4)行和下四(4-8)行。得到结果后,我想对下一列应用相同的测试,因此我将有4个不同的p值。请查看附件中的示例图像。我总共有4列,这是初步测试,稍后将使用较大的列大小执行。请问是否有人能告诉我我做错了什么并编辑代码。我很高兴能得到大家的帮助错误:是否在每列的R中循环?,r,loops,R,Loops,我有一些数据,并试图做分析。我不知道如何使用R,但我在网上看了一些视频,并试图模仿我需要的相同测试。我想做的是尝试比较前四(1-4)行和下四(4-8)行。得到结果后,我想对下一列应用相同的测试,因此我将有4个不同的p值。请查看附件中的示例图像。我总共有4列,这是初步测试,稍后将使用较大的列大小执行。请问是否有人能告诉我我做错了什么并编辑代码。我很高兴能得到大家的帮助 Test = matrix(c(120, 115, 132, 117, 116,117,125,120,110,113,128,1
Test = matrix(c(120, 115, 132, 117, 116,117,125,120,110,113,128,115),ncol=4, nrow = 4)
Test=t(Test)
Drug = matrix(c(88, 80, 85, 85, 83,84,90,83,83,79,86,82),ncol=4, nrow = 4)
Drug=t(Drug)
mydata<-cbind(Test,Drug)
for (i in 1:4)
wilcox.test(mydata[i,1:4],mydata[i,5:8], mu=0, alt="two.sided", paired=T, conf.int=F,conf.level = 0.99, exact=T,correct=T)
Test=矩阵(c(1201151321171117125120110113128115),ncol=4,nrow=4)
试验=t(试验)
药物=基质(c(88,80,85,85,83,84,90,83,83,79,86,82),ncol=4,nrow=4)
药物=t(药物)
mydata我建议使用一个data.frame
或data.table
,其中一列指定组(对应于示例中的行,例如a、B、C),一列指定试验/药物,一列指定值:
library(data.table)
Test <- c(120, 115, 132, 117, 116,117,125,120,110,113,128,115)
Drug <- c(88, 80, 85, 85, 83,84,90,83,83,79,86,82)
groups <- rep(c(rep("A", 4), rep("B", 4), rep("C", 4)), 2)
variable <- c(rep("test", length(Test)), rep("drug", length(Drug)))
dt <- data.table(group = groups, variable = variable, value = c(Test, Drug))
# >dt
# group variable value
# 1: A test 120
# 2: A test 115
# 3: A test 132
# 4: A test 117
# 5: B test 116
# 6: B test 117
# 7: B test 125
# 8: B test 120
# 9: C test 110
# 10: C test 113
# 11: C test 128
# 12: C test 115
# 13: A drug 88
# 14: A drug 80
# 15: A drug 85
# 16: A drug 85
# 17: B drug 83
# 18: B drug 84
# 19: B drug 90
# 20: B drug 83
# 21: C drug 83
# 22: C drug 79
# 23: C drug 86
# 24: C drug 82
# group variable value
库(data.table)
测试我运行了你的代码,它运行正常。你会收到一些关于领带的警告信息。这是你的问题吗?@KoenV,不,问题是循环不起作用。它是在发出警告,而不是在计算任何事情。如果我删除for循环并将“I”更改为1或2或3。。。它可以工作,但我想在循环中执行,而不是将数字写入列位置。@KoenV我想做的是使用“I”作为循环,这样它可以给出4个不同的p值。为了说明这一点,需要对这些集合进行比较:mydata[1,1:4]-mydata[1,5:8],mydata[2,1:4]-mydata[2,5:8],mydata[3,1:4]-mydata[3,5:8],mydata[4,1:4]-mydata[4,5:8]。因此,我不想每次都更改列号,但我想使用循环或自动转到下一列并重新计算的东西。实现这一点的方法是使用data.frame
,其中一列包含测量值,第二列指定例如化合物(测试/药物),第三列指定某种分组(表示数据中的行,例如组a、B、C等)。然后,dplyr
或数据。表
可用于执行分组测试(即根据A、B、C等)和wilcox。测试
采用公式参数,例如,value~ component
@Kristoferwintherballing您的解决方案超出接受范围,先生。非常感谢你。我想问另一个问题。如果我有100个这样的专栏,我应该写20封不同的信吗?对于3个不同的列,您编写了A、B、C,但是对于大量的列号,有没有捷径?很抱歉重复下面的同一个问题,因为我在那里找不到提到你名字的方法+先生,你救了我的命。非常感谢你。我想问另一个问题。如果我有100个这样的专栏,我应该写20封不同的信吗?对于3个不同的列,您编写了A、B、C,但是对于大量的列号,有没有捷径+1+1+1+1不客气。您可以使用数字(例如1到100)而不是A、B、C。有没有一种方法可以循环使用,先生?我的意思是,即使这样,我也可以很好地使用,但如果有一条捷径,而不是写1到100,我会非常高兴。再次感谢您的帮助。对于这个示例,我没有使用CSV文件,而是手动编写的。但是我可以读取csv文件,也可以在csv中进行准备。对于真实数据,您可以提供您正在读取的csv的结构(我希望您不要手动键入~800个数字)。这像你问题中的矩阵吗?
dt_stat <- dt[, .(p_value = wilcox.test(value~variable, mu=0, alt="two.sided", paired = TRUE,
conf.int = FALSE, conf.level = 0.99,exact = TRUE, correct = TRUE)$p.value),
by = .(group)]
# > dt_stat
# group p_value
# 1: A 0.09751254
# 2: B 0.09751254
# 3: C 0.12500000