首页 > 解决方案 > 制作一个函数来获取数据框R中多行的百分比

问题描述

我有一个包含数百个样本和数千个变量的数据框。但是这里我给出一个简单的数据框(my_data)作为说明。我想根据基因所属的集群(基因可以在多个集群中)获得变量相对于gene_count总和的百分比。我知道如何获取每个使用数据框操作的百分比。但是,由于我是编码新手,我正在尝试创建一个函数来获取百分比。谁能帮助如何使用我的函数(百分比)获得每个基因的百分比?结果将是“百分比”列上的百分比。非常感谢。

gene = c("CD63", "PTN", "MT2A", "PTGDS", "DBI", "TIMP1", "COX6C", "APLP2", "PTN", "GPC1")
gene_count = c(10, 15, 5, 15, 10, 25, 5, 5, 5, 5)
cluster = c(1,2, 3, 5, 7, 8, 9, 3, 6, 4 )
percent = c(0.1, 0.15, 0.5, 0.15, 0.1, 0.25, 0.05, 0.05, 0.05, 0.05)
my_data = data.frame(gene, gene_count, cluster, percent)
my_data


percent = function(gene, cluster){
for (gene in c(data$gene)){
if (data$gene == gene & data$cluster == cluster)
print(data$gene_count[which(data$gene == gene & data$cluster == cluster)]/sum(data$gene_count))
else print("Gene is not expressed in this cluster")
  }
}

在此处输入图像描述

标签: rfunctiondataframepercentage

解决方案


您可以按以下方式编写函数:

percent <- function(data, my_gene, my_cluster) {
  sub_data <- subset(data, gene == my_gene & cluster == my_cluster)
  if(nrow(sub_data)) sum(sub_data$gene_count)/sum(data$gene_count)
  else cat("Gene is not expressed in this cluster")
}

percent(my_data, 'PTN', 2)
#[1] 0.15

percent(my_data, 'ABC', 2)
#Gene is not expressed in this cluster

推荐阅读