dplyr基于分组变量的行中值

时间:2017-03-17 09:24:35

标签: r dplyr

假设这是我的示例数据:

gene_data=data.frame(gene=c("g1","g2","g3","g4"),
sample1=c(12,25,73,84),
sample2=c(54,65,89,97),
sample3=c(45,25,6,8),
sample4=c(23,23,45,6))

我想得到每个基因的中位数表达,当我尝试这个时它不起作用。

gene_data %>% group_by(gene) %>% summarise(medians=median(.))

因为它警告我关于非数字列,这是第一个“基因”列...

但是,这个效果很好:

gene_data %>% group_by(gene) %>% summarise(medians=median(sample1:sample4))

这个创建一个这样的输出,这是我想要的:(这个表错了,要小心,所以这不是我想要的)

# A tibble: 4 × 2
gene medians
<fctr>   <dbl>
1     g1    17.5
2     g2    24.0
3     g3    59.0
4     g4    45.0

但是我需要一个通用的解决方案,我现在需要summarise_each,它将中位数应用于所有基因,这是错误的。

我不一定知道样本的名称,所以我想在开头和结尾都不知道样本名称的情况下得到中值表达式。

例如,

gene_data %>% group_by(gene) %>% summarise(medians=median([the numeric columns, or column that contain something]))

也许这太容易了,但我找不到Dplyr。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我们可以使用do

library(dplyr)
gene_data %>%
   group_by(gene) %>% 
   do(data.frame(medians = median(unlist(.[-1]))))