我有一个遍历数据帧的循环,运行ttests并将每个ttest的结果p值存储在另一个数据帧中。
以下是' mydata'是运行ttests的数据帧。 ' MYDATA'是一个包含4列的数据框:
df <- mydata
mydf <- data.frame(c(1:4))
# this is the new dataframe being initialized to store my p-values
row.names(mydf) <- names(df)
for(i in names(df)){
if(sd(df[[i]]) == 0) {
# this prevents the loop from terminating and returning an error when ttests
# are run on columns with binary values
} else {
ttest <- t.test(df[df$Pre==1,][[i]], df[df$Pre==2,][[i]], paired=FALSE)
# 'Pre' is the column that groups my data into
# distinct cohorts. I am comparing the Pre cohort versus the Post cohort
# in these ttests.
mydf[i,1] <- ttest$p.value
}
}
mydf
这是我对未配对(配对= FALSE)ttest的mydf输出:
c.1.4.
density 0.3569670
clust 0.9715987
Pre 3.0000000
HC 4.0000000
然而,当我将paired = FALSE更改为paired = TRUE(运行配对的ttest)时,这里是mydf:
c.1.4.
density 1
clust 2
Pre 3
HC 4
我使用我的数据框的第一列单独检查了我的循环的这一行,&#39; 1&#39;在双括号中,(对于配对= TRUE)它似乎输出一个p值:
ttest <- t.test(df[df$Pre==1,][[1]], df[df$Pre==2,][[1]], paired=TRUE)
ttest$p.value
[1] 0.356967
以下是可用于重现错误的示例数据集:
density clust Pre HC
RDHC008A_13 0.47991 0.676825 1 1
RDHC009A_13 0.49955 0.696441 1 1
RDHC010A_16 0.491454 0.706507 1 1
RDHC013A_13 0.442879 0.689118 1 1
RDHC014A_13 0.453823 0.691603 1 1
RDHC016A_16 0.481259 0.706978 1 1
RDHC019A_06 0.515442 0.699514 1 1
RDHC021A_15 0.449925 0.685202 1 1
RDHC022A_12 0.461319 0.705446 1 1
RDHC023A_11 0.468816 0.667698 1 1
RDHC024A_12 0.515142 0.719474 1 1
RDHC025A_13 0.496702 0.710877 1 1
RDHC026A_12 0.477061 0.695061 1 1
RDHC027A_12 0.515442 0.722269 1 1
RDHC029A_12 0.406747 0.669998 1 1
RDHC030A_12 0.476162 0.69219 1 1
RDHC032B_13 0.50075 0.685474 1 1
RDHC034B_07 0.525487 0.725558 1 1
RDHC036B_07 0.468816 0.698904 1 1
RDHC038B_07 0.470015 0.706668 1 1
RDHC039B_07 0.511544 0.712818 1 1
RDHC041A_14 0.551574 0.732983 1 1
RDHC004C_12 0.486207 0.695121 2 1
RDHC005C_12 0.505997 0.695598 2 1
RDHC006C_13 0.487406 0.697044 2 1
RDHC013C_12 0.41979 0.685518 2 1
RDHC015C_13 0.297751 0.69632 2 1
RDHC016C_16 0.463718 0.700011 2 1
RDHC019C_14 0.508096 0.690071 2 1
RDHC021C_12 0.448426 0.688265 2 1
RDHC022C_12 0.468816 0.700968 2 1
RDHC024C_12 0.515292 0.70664 2 1
RDHC025C_13 0.473163 0.704231 2 1
RDHC027C_12 0.518741 0.732939 2 1
RDHC030C_11 0.489205 0.708174 2 1
您可以通过执行以下操作来导入它:
复制数据并将其粘贴到下面代码的引号中:R:
zz <- ""
现在,将数据分配给data.frame:
mydata <- read.table(text=zz, header=TRUE)
我不知道为什么要更改配对的&#39;参数为TRUE会导致这种情况发生。任何帮助/建议将不胜感激。谢谢 - 保罗
答案 0 :(得分:0)
您使用值1:4
初始化mydf
data.frame
mydf <- data.frame(c(1:4))
基本上循环不执行任何操作,因为t.test
在执行PAIRED=TRUE
时抛出错误,因为您的两组值不是相同的长度(并且它们需要在执行配对t时你有22个值,其中Pre == 1和13个值,其中Pre == 2.你不能用这样的不平衡进行配对测试。