Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用交换行/列跨两个不同的数据帧进行t检验?_R_Subset_T Test - Fatal编程技术网

R 使用交换行/列跨两个不同的数据帧进行t检验?

R 使用交换行/列跨两个不同的数据帧进行t检验?,r,subset,t-test,R,Subset,T Test,对不起,这个标题让人困惑,这个有点难以描述。基本上,我有两个类似的数据表: 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.

对不起,这个标题让人困惑,这个有点难以描述。基本上,我有两个类似的数据表:

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我不明白您为什么认为这不起作用-我认为您的代码中有语法错误。以下代码似乎工作正常(请注意使用
sapply
,这在R中稍微有点传统):

df1[,3]此处使用
which(colnames(df2)…
可能不是最佳选择,因为您只需选择
df2
中包含
df1[i,1]
df1[i,2]
作为名称的列

在R中,通过名称选择列的一种方法是使用双括号:例如,
df2[[“a”]
将检索
df2
a
,这似乎是您想要的,并且比
df2[(colnames(df2)=“a”)]更简单

考虑到这一点,您可以像这样重写代码:

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
}
for (i in 1:nrow(df1)){
  test <- t.test(df2[[df1[i, 2]]] ~ df2[[df1[i, 1]]])
  df1[i, 3] <- test$p.value
} 
for(i in 1:nrow(df1)){

测试可能我只是做错了什么,但我似乎无法让colnames只处理一列。例如,如果我要键入
colnames(df[,1])
输出为空,其中as
colnames(df[,1:2]
返回SNP和Gene.ID。查看
df[,1]
vs
df[,1:2]
df的输出[,1,drop=FALSE]
,请参阅以下部分(8.1.44和45):顺便说一句,我不是说我的话听起来很短-这是一个常见的错误,事实上,你只是希望R的行为符合逻辑和一致性-我相信随着时间的推移,你会停止这样做:)这个双括号技巧真的很方便!我没想到没有$operator你就可以做到这一点。谢谢你的提示!是的,我非常喜欢
$
,它使用起来更简单,但是
[…]
提供了更多的功能。
for (i in 1:nrow(df1)){
  test <- t.test(df2[[df1[i, 2]]] ~ df2[[df1[i, 1]]])
  df1[i, 3] <- test$p.value
}