问题描述
我有一个巨大的元数据文件,其中包含79列和78687行。这些元数据来自我们的癌症实验结果。 我正在使用dplyr查询该元数据中每个样本的单元格计数。
我有16个样本:
我需要找到每个样本中每种情况(肿瘤或正常或MSS_Status)的细胞计数。 我正在单独进行操作,如下所示
dim(Meta %>% filter(Condition == "Tumor" & MSI_Status=="MSS" & Location =="Left" & orig.ident == "B_cac10"));
# 689 24
我敢肯定有一种聪明的方法可以做到这一点,我如何才能一遍又一遍地得到答案?
P.S:我是一名生物学家,我在循环或编码方面的知识非常有限
编辑:1
可复制的示例
df <- data.frame(Condition = c("normal","normal","Tumor","Tumor"),MSI_Status = c("High","High","Low","Low"),Location = c("Lungs","Lungs","Kidney","Liver"),Clusters = c(1,2,4,6),orig.ident = c("B-cac10","B-cac11","T-cac15","B-cac15","B-cac19","T-cac22"))
我的代码:
df %>% filter(Condition == "Tumor" & MSI_Status=="Low" & Location
=="Kidney" & orig.ident == "B-cac15")
预期结果:
每个原始身份的计数应在条件“肿瘤”,MSI_Status ==“低”和位置=“肾脏”下给出
非常感谢您的帮助,请保持安全。 戴夫
解决方法
您可以使用dplyr
函数filter
根据您的条件对数据进行子集化。然后,您可以使用dplyr
count
函数对orig.ident
中的唯一值进行计数。如注释中所提到的,您可以选择在此功能内设置name = Freq
。由于您是rename
的新手,所以我选择使用R
函数来尽可能地明确。
数据
df <- data.frame(Condition =
c("Normal","Normal","Tumor","Tumor"),MSI_Status =
c("High","High","Low","Low"),Location = c("Lungs","Lungs","Kidney","Liver"),Clusters =
c(1,2,4,6),orig.ident=c("B-cac10","B-cac11","T-cac15","B-
cac15","B-cac19","T-cac22"))
代码
library(dplyr)
df %>%
filter(Condition == "Tumor" &
MSI_Status == "Low" &
Location == "Kidney") %>%
count(orig.ident) %>%
rename(Freq = n)
#> orig.ident Freq
#> 1 B-cac15 1
#> 2 B-cac19 1
由reprex package(v0.3.0)于2020-09-05创建