在计算 R 中两个数据帧之间的相关性之前如何忽略双零
How do I ignore double zeros before calculating correlation between two data frames in R
我有两个具有相同列数(100:样本)和行数(9600:基因)的数据框。这两个数据帧是从两个不同的程序输出的,我想计算它们之间的相关性。
我的示例数据集:
df1 <-data.frame(Sample1 =c(0.52,2.5,8.3,10.5,5.3),Sample2=c(0,0,2,1,0), Sample3=c(0,12,13,14,0))
rownames(df1)<-c("KO1","KO2","KO3","KO4","KO5")
df2<- data.frame(Sample1=c(1,2,3,4,5),Sample2=c(0,0,8,9,0),Sample3=c(0,12,13,14,0))
rownames(df2)<-c("KO1","KO2","KO3","KO4","KO5")
df<-data.frame(df1,df2)
>df1
Sample1 Sample2 Sample3
KO1 0.52 0 0
KO2 2.50 0 12
KO3 8.30 2 13
KO4 10.50 1 14
KO5 5.30 0 0
>df2
Sample1 Sample2 Sample3
KO1 1 0 0
KO2 2 0 12
KO3 3 8 13
KO4 4 9 14
KO5 5 0 0
在计算相关性时,我想删除两个数据中都为零的条目 frame.For 例如,对于样本 1,每一行都应该包括在内,但对于样本 2,KO1、KO2 和 KO5 不应该被包括在内,同样对于 sample3,不应包括 KO1 和 KO5。在这里,我计算两个数据帧之间的列相关性。
我尝试了以下代码:
output_without_zero<- with(subset(df, !(df1 == 0 & df2 == 0)), cor(df1,df2,method = "spearman"))
output_with_zero<- cor(df1,df2,method = "spearman")
我预计从相关性中删除零应该不同于包括它们。但是我得到了他们两个相同的相关矩阵。
如何得到想要的输出?
提前致谢
我想你的意思是不应该包括 KO1、KO2 和 KO5。
此外,我不确定 subset(df, !(df1 == 0 & df2 == 0)
在没有 df
时是否有效。
尝试-
inds <- rowSums(df1 == 0 & df2 == 0) == 0
#If you want to remove rows which has any occurrence of 0 in either dataframe
#inds <- rowSums(df1 == 0 | df2 == 0) == 0
df1_1 <- df1[inds, ]
df2_1 <- df2[inds, ]
output_with_zero<- cor(df1,df2,method = "spearman")
output_without_zero<- cor(df1_1,df2_1,method = "spearman")
用 NA
替换零
df1[df1 == 0] <- NA
df2[df2 == 0] <- NA
来自 complete.obs
cor(df1, df2, method = "spearman", use = "complete.obs")
Sample1 Sample2 Sample3
Sample1 1 1 1
Sample2 -1 -1 -1
Sample3 1 1 1
来自 pairwise.complete.obs
cor(df1, df2, method = "spearman", use = "pairwise.complete.obs")
Sample1 Sample2 Sample3
Sample1 0.7 1 1
Sample2 -1.0 -1 -1
Sample3 1.0 1 1
我有两个具有相同列数(100:样本)和行数(9600:基因)的数据框。这两个数据帧是从两个不同的程序输出的,我想计算它们之间的相关性。
我的示例数据集:
df1 <-data.frame(Sample1 =c(0.52,2.5,8.3,10.5,5.3),Sample2=c(0,0,2,1,0), Sample3=c(0,12,13,14,0))
rownames(df1)<-c("KO1","KO2","KO3","KO4","KO5")
df2<- data.frame(Sample1=c(1,2,3,4,5),Sample2=c(0,0,8,9,0),Sample3=c(0,12,13,14,0))
rownames(df2)<-c("KO1","KO2","KO3","KO4","KO5")
df<-data.frame(df1,df2)
>df1
Sample1 Sample2 Sample3
KO1 0.52 0 0
KO2 2.50 0 12
KO3 8.30 2 13
KO4 10.50 1 14
KO5 5.30 0 0
>df2
Sample1 Sample2 Sample3
KO1 1 0 0
KO2 2 0 12
KO3 3 8 13
KO4 4 9 14
KO5 5 0 0
在计算相关性时,我想删除两个数据中都为零的条目 frame.For 例如,对于样本 1,每一行都应该包括在内,但对于样本 2,KO1、KO2 和 KO5 不应该被包括在内,同样对于 sample3,不应包括 KO1 和 KO5。在这里,我计算两个数据帧之间的列相关性。
我尝试了以下代码:
output_without_zero<- with(subset(df, !(df1 == 0 & df2 == 0)), cor(df1,df2,method = "spearman"))
output_with_zero<- cor(df1,df2,method = "spearman")
我预计从相关性中删除零应该不同于包括它们。但是我得到了他们两个相同的相关矩阵。 如何得到想要的输出?
提前致谢
我想你的意思是不应该包括 KO1、KO2 和 KO5。
此外,我不确定 subset(df, !(df1 == 0 & df2 == 0)
在没有 df
时是否有效。
尝试-
inds <- rowSums(df1 == 0 & df2 == 0) == 0
#If you want to remove rows which has any occurrence of 0 in either dataframe
#inds <- rowSums(df1 == 0 | df2 == 0) == 0
df1_1 <- df1[inds, ]
df2_1 <- df2[inds, ]
output_with_zero<- cor(df1,df2,method = "spearman")
output_without_zero<- cor(df1_1,df2_1,method = "spearman")
用 NA
df1[df1 == 0] <- NA
df2[df2 == 0] <- NA
来自 complete.obs
cor(df1, df2, method = "spearman", use = "complete.obs")
Sample1 Sample2 Sample3
Sample1 1 1 1
Sample2 -1 -1 -1
Sample3 1 1 1
来自 pairwise.complete.obs
cor(df1, df2, method = "spearman", use = "pairwise.complete.obs")
Sample1 Sample2 Sample3
Sample1 0.7 1 1
Sample2 -1.0 -1 -1
Sample3 1.0 1 1