如何为R语言数据框单行的所有值计算Z分数并生成新数据框
报错原因
你没有提前初始化z_score对象,R找不到对应的存储容器就会抛出该错误。如果要保留for循环写法,在循环前加一行z_score <- numeric(ncol(NANOG_data))初始化等长的数值向量即可解决报错。
更推荐的向量化实现(无需for循环,效率更高)
- 如果你需要对数据框所有行逐行计算Z分数,直接转置后调用
scale函数即可:
library(matrixStats) # 计算每行的均值和标准差 row_means <- rowMeans(NANOG_data) row_sds <- rowSds(as.matrix(NANOG_data)) # 转置后用scale标准化,再转置恢复原有行列结构 z_score_df <- as.data.frame(t(scale(t(NANOG_data), center = row_means, scale = row_sds)))
- 如果你的数据框第一行是注释信息,仅需要计算第二行(表达量数值行)的Z分数,可以更简化:
# 提取第二行的表达量数值 expr_vals <- as.numeric(NANOG_data[2, ]) # 直接向量化计算所有样本的Z分数 z_score <- (expr_vals - mean(expr_vals)) / sd(expr_vals) # 如需转成数据框格式 z_score_df <- as.data.frame(t(z_score)) colnames(z_score_df) <- colnames(NANOG_data)
内容的提问来源于stack exchange,提问作者menan
相关产品推荐
相关产品推荐

