我有一個數據框,其中包含一個基因在 1677 條件下的表達水平。我正在尋找一個新的數據框,它具有每個條件的 Z 分數。這是我到目前為止的代碼:
for (cell_no in 1:ncol(NANOG_data)) {
z_score[cell_no] <- (NANOG_data[2, cell_no] - rowMeans(NANOG_data)) / rowSds(as.matrix(NANOG_data))}
當我運行此代碼時,出現此錯誤:
錯誤:找不到對象“z_score”。
有沒有辦法使用 for 循環更輕鬆地填充新數據框,或者是否有可以在原始數據框上運行的矢量化函數來計算每個值的 Z 分數?
正如@GuedesBF 評論的那樣,發布數據截圖是不好的做法,你應該避免這種情況(參考https://xkcd.com/2116/)。
我會嘗試用一個虛擬數據集來幫助你:
#let's first generate a matrix
set.seed(999)
my_dummy_data <- matrix(rnorm(length(letters)), nrow=1, dimnames=list(1,letters))
>my_dummy_data
a b c d e f g
1 -0.2817402 -1.31256 0.795184 0.2700705 -0.2773064 -0.5660237 -1.878658
h i j k l m n
1 -1.266791 -0.9677497 -1.121009 1.325464 0.1339774 0.9387494 0.1725381
o p q r s t u
1 0.9576504 -1.362686 0.06833513 0.1006576 0.9013448 -2.074357 -1.228563
v w x y z
1 0.6430443 -0.3597629 0.2940356 -1.125268 0.6422657
據我了解,這與您的數據結構相同:列名是基因(例如“AAACCCTG ...”),數值是“表達式”。(不是遺傳學家,如果我弄錯了術語,請道歉:))。
現在,我假設您要生成一個新向量,通過減去均值並除以標準誤差,將表達式值轉換為 z 分數。這可以通過以下方式完成:
my_z_scores <-( my_dummy_data-mean(my_dummy_data) ) / sd(my_dummy_data)
超越您的實際問題,在進行任何進一步分析之前,您可能希望將數據轉換為柱狀形式:
my_better_dummy_data <- data.frame(gene=colnames(my_dummy_data), expression=as.vector(my_dummy_data) )
在柱狀形式中,z 分數可以計算為
my_better_dummy_data$z_score <- (my_better_dummy_data$expression - mean(my_better_dummy_data$expression) / sd(my_better_dummy_data$expression)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句