错误:是否在每列的R中循环?

错误:是否在每列的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

我有一些数据,并试图做分析。我不知道如何使用R,但我在网上看了一些视频,并试图模仿我需要的相同测试。我想做的是尝试比较前四(1-4)行和下四(4-8)行。得到结果后,我想对下一列应用相同的测试,因此我将有4个不同的p值。请查看附件中的示例图像。我总共有4列,这是初步测试,稍后将使用较大的列大小执行。请问是否有人能告诉我我做错了什么并编辑代码。我很高兴能得到大家的帮助

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