【发布时间】:2018-04-18 20:56:18
【问题描述】:
对不起,这个令人困惑的标题,这个有点难以描述。基本上,我有两个类似这样的数据表:
df1 <- data.frame(SNP=c("W", "X", "Y", "Z"),
Gene.ID=c("A", "B", "C", "B"), pval=NA)
df2 <- data.frame(W=c(1, 0, 1), X=c(1, 1, 0), Y=c(0, 0, 1), Z=c(1, 0, 1),
A=c(3.5, 2.5, 3.5), C=c(4.5, 2.5, 1.5), B=c(1.5, 2.5, 1.5))
所以 df1 中的所有条目都对应 df2 中的列名。我的目标是用 t 检验的 p 值填充 df1$pval。对于 df1 中的每一行,我想做一个 t 检验,比较匹配 df1$SNP 值的 df2 列,并将其与匹配 df1$Gene.ID 值的 df2 列进行比较。
例如,对于 df1 中的第一行,我想比较 df2$W 与 df2$A,然后在 df1[1, 3] 中返回结果 p 值。对于第二行,我将比较 df2$X 与 df2$B 并返回 df1[2, 3] 中的 p 值。换句话说,是这样的:
for (i in 1:nrow(df1)){
test <- t.test(df2[,which(colnames(df2)==df1[i, 1]] ~ df2[,which(colnames(df2)==df1[i, 2]])
df1[i, 3] <- test$p.value
}
但这不起作用,因为您只能使用colnames 函数选择多个列名,而不仅仅是单个列名。非常感谢有关如何解决此问题的建议 - 或者如果您有更简单的方法,那也很棒。
【问题讨论】: