如何在两个数据帧之间应用fishers测试?
我有如下数据帧:如何在两个数据帧之间应用fishers测试?,r,dataframe,statistics,bioconductor,R,Dataframe,Statistics,Bioconductor,我有如下数据帧: Type Pvalue CC 0.0004191 Ch 0.6978 H 0.8885 J 0.0226 OS 0.5491 O 0.07202 R 0.5013 W 0.02091 df1: df2: 我为“CC”申请了fishers测试 但要为所有其他人做到这一点,这是一个耗时的过程。我希望一次对所有其他类型应用fishers测试,结果如下所示: Type Pvalue CC 0.0004191 Ch 0.6978 H 0.8
Type Pvalue
CC 0.0004191
Ch 0.6978
H 0.8885
J 0.0226
OS 0.5491
O 0.07202
R 0.5013
W 0.02091
df1:
df2:
我为“CC”申请了fishers测试
但要为所有其他人做到这一点,这是一个耗时的过程。我希望一次对所有其他类型应用fishers测试,结果如下所示:
Type Pvalue
CC 0.0004191
Ch 0.6978
H 0.8885
J 0.0226
OS 0.5491
O 0.07202
R 0.5013
W 0.02091
我从下面的答案中得到了上述事情的答案。但我现在用更多的数据编辑这个。如果数据如下所示,该怎么办
Type Pvalue
CC 0.0004191
Ch 0.6978
H 0.8885
J 0.0226
OS 0.5491
O 0.07202
R 0.5013
W 0.02091
df1:
df2:
我还想对(S3,S4)和(S5,S6)应用fishers测试,并得到结果中的p值。我可以通过只选择那些列并应用fishers测试来完成,如下面的答案(S1,S2)。但我想一次做完所有的事。在我的原始数据中,我有很多这样的列。谢谢 最简单的方法是
rbind
两个数据帧,在类型上拆分,并对列表中的每个元素应用测试,即
full_df <- rbind(df1, df2)
lapply(split(full_df, full_df$Type), function(i) fisher.test(as.matrix(i[-1])))
最简单的方法是rbind
两个数据帧,在类型上拆分,并对列表的每个元素应用测试,即
full_df <- rbind(df1, df2)
lapply(split(full_df, full_df$Type), function(i) fisher.test(as.matrix(i[-1])))
您可以使用R
的sapply()
功能。我假设,“Type”是一个列名
p_values <- sapply(1:nrow(df1), function(x)
fisher.test(rbind(df1[x,-1],df2[x,-1]))$p.value)
# -1 inside the data frame (df1[x,-1] and df2[x,-1]) is for canceling out the Type column. If it is a rowname, then you don't need to add that...
final <- cbind(df1$Type,as.data.frame(p_values))
colnames(final) <- c("Type","Pvalue")
Type Pvalue
1 CC 0.0004191119
2 Ch 0.6978356887
3 H 0.8884858252
4 J 0.0225999709
5 OS 0.5491422972
6 O 0.0720173867
7 R 0.5012970020
8 W 0.0209138164
p\u值您可以使用R
的sapply()
功能。我假设,“Type”是一个列名
p_values <- sapply(1:nrow(df1), function(x)
fisher.test(rbind(df1[x,-1],df2[x,-1]))$p.value)
# -1 inside the data frame (df1[x,-1] and df2[x,-1]) is for canceling out the Type column. If it is a rowname, then you don't need to add that...
final <- cbind(df1$Type,as.data.frame(p_values))
colnames(final) <- c("Type","Pvalue")
Type Pvalue
1 CC 0.0004191119
2 Ch 0.6978356887
3 H 0.8884858252
4 J 0.0225999709
5 OS 0.5491422972
6 O 0.0720173867
7 R 0.5012970020
8 W 0.0209138164
p_值这看起来很棒,谢谢。我想问一个问题。如果我在两个数据帧中都有更多的列,如S3、S4、S5、S6,并且希望对(S3、S4)和(S5、S6)应用fishers测试,那么这对更多的列也有效吗?我不确定您是否正确理解,但您可以访问您想要的任何列。这只是设置的问题。。。下面,编写了一种设置要放入fisher测试中的列名的方法。考虑DF1和DF2有多个列称为S1、S2、S3、S4、S5……代码>c_名称1这看起来很棒,谢谢。我想问一个问题。如果我在两个数据帧中都有更多的列,如S3、S4、S5、S6,并且希望对(S3、S4)和(S5、S6)应用fishers测试,那么这对更多的列也有效吗?我不确定您是否正确理解,但您可以访问您想要的任何列。这只是设置的问题。。。下面,编写了一种设置要放入fisher测试中的列名的方法。考虑DF1和DF2有多个列称为S1、S2、S3、S4、S5……code>c_name1 Hi Sotos,如果我在S3、S4、S5、S6这两个数据帧中都有更多的列,并对(S3、S4)和(S5、S6)以及(S1、S2)应用fishers测试会怎么样。上述代码是否也适用于此类数据框?请使用任何新要求更新您的问题。谢谢您的回复。是的,我更新了问题,请检查。嗨,Sotos,如果我在S3、S4、S5、S6这两个数据框中都有更多的列,并且对(S3、S4)和(S5、S6)以及(S1、S2)应用fishers测试会怎么样。上述代码是否也适用于此类数据框?请使用任何新要求更新您的问题。谢谢您的回复。是的,我更新了问题,请检查一下。
sapply(split(full_df, full_df$Type), function(i) fisher.test(as.matrix(i[-1]))$p.valu)
# CC Ch H J O OS R W
# 0.0004191119 0.6978356887 0.8884858252 0.0225999709 0.0720173867 0.5491422972 0.5012970020 0.0209138164
p_values <- sapply(1:nrow(df1), function(x)
fisher.test(rbind(df1[x,-1],df2[x,-1]))$p.value)
# -1 inside the data frame (df1[x,-1] and df2[x,-1]) is for canceling out the Type column. If it is a rowname, then you don't need to add that...
final <- cbind(df1$Type,as.data.frame(p_values))
colnames(final) <- c("Type","Pvalue")
Type Pvalue
1 CC 0.0004191119
2 Ch 0.6978356887
3 H 0.8884858252
4 J 0.0225999709
5 OS 0.5491422972
6 O 0.0720173867
7 R 0.5012970020
8 W 0.0209138164
group <- list(group1= c("S1","S2"),group2=c("S3","S4"),group3=c("S5","S6"))
for(i in 1:length(group)) {
p_values <- sapply(1:nrow(df1), function(x) {
a=cbind(df1[x,group[[i]][1]],df1[x,group[[i]][2]])
b=cbind(df2[x,group[[i]][1]],df2[x,group[[i]][2]])
fisher.test(rbind(a,b))$p.value })
p <- as.data.frame(p_values)
colnames(p) <- paste("PValue-Group-",i,sep="")
if (i==1) {
Type<-as.data.frame(df1$Type)
colnames(Type) <- "Type"
final <- cbind(Type,p)
}else{
final <- cbind(final,p)
}
}
Type PValue-Group-1 PValue-Group-2 PValue-Group-3
1 CC 0.0004191119 0.0005763285 0.31383253
2 Ch 0.6978356887 0.6504086114 0.52187626
3 H 0.8884858252 0.4619796458 0.64343778
4 J 0.0225999709 0.1457729970 0.49159715
5 OS 0.5491422972 0.3829413140 0.73695562
6 O 0.0720173867 0.1166177467 0.08215306
7 R 0.5012970020 0.9066133264 0.03416412
8 W 0.0209138164 0.7377283808 0.01096746