2015-07-31 2 views
-2

У меня есть большой файл данных, который выглядит как:Создание гистограммы распределения и затем вычисления zscore в R

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 и не считая любой НАН Украины:

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))

Мой следующий план - рассчитать z-балл для моего процента Input_SNP. Я думал, это может быть сделано

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

ВЫШЕУКАЗАННЫЕ МОЯ ПОПЫТКА псевдокоде. КАК ЭТО СДЕЛАТЬ В R?

Я бы тогда хотел напечатать Z-счет на гистограмме:

Я думал, возможно, с: jpeg("hist.jpg")

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

print(zscore)

dev.off()

ЭТО, КАК ПЕЧАТНЫЕ РАБОТЫ?

+0

Вы в основном перепросите большую часть того, что вы уже задали в этом вопросе. http://stackoverflow.com/questions/31753882/r-distribution-plot-with-na-data-and-thresholds. Что вы имеете в виду, когда говорите, что попробовали 'mdd2 <- colMeans (as.matrix (mdd)> 2, na.rm = TRUE), но * он не работает *? Что означает «не работает»? Вы действительно задаете только один вопрос за раз. – MrFlick

+0

Я храню 'data <- colMeans (as.matrix (mdd)> 2, na.rm = TRUE)', а затем, когда я делаю 'head (data)', я получаю только первые 6 столбцов. – Evan

ответ

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] 
+0

Ваш первый код не работает. НС воюют с этим. У меня есть 100 столбцов в действительности, и он возвращает только 5 столбцов. И средства столбцов все испорчены. Я даже не хочу среднего столбца. Я хочу, чтобы процент очков в каждом столбце превышал 2. Это имеет смысл? То же самое для barplot – Evan

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 
+0

Я что-то упустил? Есть ли причина, по которой 'colMeans (as.matrix (df)> 2, na.rm = TRUE)' не будет работать? Меня раздражает, что этот вопрос так похож на предыдущий, но с еще большим количеством вопросов. – MrFlick

+0

Да, это тоже работает :) Мы - кучка надмыслителей –

+0

Я даже не попробовал. Предполагалось, что ОП нашел в нем что-то не так. –