进行直方图分布,然后计算R中的zscore

时间:2015-07-31 21:30:46

标签: r dataframe distribution

我有一个大型数据文件,如下所示:

Input_SNP   Set_1    Set_2     Set_3     Set_4     Set_5     Set_6
1.09        0.162    NA        2.312     1.876     0.12      0.812
0.687       NA       0.987     1.32      1.11      1.04      NA
NA          1.890    0.923     1.43      0.900     2.02      2.7
2.801       0.642    0.791     0.812     NA        0.31      1.60
1.33        1.33     NA        1.22      0.23      0.18      1.77
2.91        1.00     1.651     NA        1.55      3.20      0.99
1.00        2.31     0.89      1.13      1.25      0.12      1.55

我想找到每列超过2且未计算任何NA的百分比:

Input_SNP    Set_1     Set_2     Set_3     Set_4     Set_5     Set_6
0.33         0.166     0.000     0.166     0.000     0.286     0.166

我试过了mdd2 <- colMeans(as.matrix(mdd) > 2, na.rm=TRUE),但它没有用。 我如何获得上述输出?

然后我想在Set_1到Set_6中对值进行直方图分布。我已经使用hist(colMeans(as.matrix(df[,-1]) > 2, na.rm=TRUE))

完成了此操作

我的下一个计划是计算我的Input_SNP百分比的z分数。我认为这可以通过

来完成

pop_sd <- sd(my row name)*sqrt((row length -1)/(row length))

pop_mean <- mean(row)

zscore <- (Input_SNP percentage minus pop_mean)/pop_sd

以上是我的伪代码尝试。如何完成这项工作?

然后我想在直方图上打印z分数:

我正在考虑以下事项: jpeg("hist.jpg")

hist(colMeans(as.matrix(df[,-1]) > 2, na.rm=TRUE))

print(zscore)

dev.off()

印刷如何运作?

2 个答案:

答案 0 :(得分:1)

有一个is.na.data.frame方法返回一个与其参数相同维度的逻辑对象,可以与你想要的colSums结合使用(与!一起给予否定)。

colSums(df>2, na.rm=TRUE)/colSums(!is.na(df))
Input_SNP     Set_1     Set_2     Set_3     Set_4     Set_5     Set_6 
    0.333     0.167     0.000     0.167     0.000     0.286     0.167 

答案 1 :(得分:0)

你可以尝试类似的东西:

over2<-colMeans(apply(as.matrix(ds), c(1,2), function(x) ifelse(is.na(x)||x<2, 0, 1)))
percent_over2 <- colSums(over2)/dim(over2)[1]