【问题标题】:subsetting a dataset in R [duplicate]在 R 中对数据集进行子集化
【发布时间】:2019-09-26 21:14:24
【问题描述】:

我有一个基于计数总和过滤数据集的问题

我的文件如下所示:

g1  a   2
g1  a   3
g1  a   0
g1  b   1
g2  b   3
g2  c   4
g2  d   9
g3  e   1
g3  f   3
g4  g   10
g4  h   18
g4  i   23

第一列是基因名称。我想从第三列计算与每个基因相关的总和,对于 g1,它是 6,对于 g2,它是 16,依此类推。那么条件是如果每个基因的总和 > 10 然后过滤上面的输入数据集,使得我的输出看起来像

g2  b   3
g2  c   4
g2  d   9
g4  g   10
g4  h   18
g4  i   23 

这是我迄今为止尝试过的:

tab <- read.data("input.txt",header=FALSE)
genelist <- split(tab,tab[,1])

我如何对其求和并过滤掉> 10。我想我必须使用 sapply 来循环它,但我被困在这里。 任何帮助表示赞赏

【问题讨论】:

  • @NelsonGon 不完全是。 OP希望保留原始行,而不仅仅是总和值:-)
  • 也许使用dplyr mutate?我的错!
  • dplyr你可以做df %&gt;% group_by(V1) %&gt;% filter(sum(V3) &gt; 10)
  • @RonakShah 我实际上找不到重复项,所以可以将其发布为答案。
  • 如果要保留Sum列:df %&gt;% group_by(V1) %&gt;% mutate(Sum=sum(V3)) %&gt;% filter(Sum &gt; 10)

标签: r split subset sapply


【解决方案1】:

这就是你要找的吗?

n_vars <- 40
gene <- sample(x=c("g1","g2","g3","g4"),size=n_vars,replace = TRUE)
v1 <- sample(x=c("a","b","c","d","e","f","g"),size=n_vars,replace = TRUE)
result <- rnorm(n=n_vars,mean=0,sd=10)

df <- data.frame(gene,v1,result) %>% 
  arrange(gene,v1) %>% 
  group_by(gene,v1) %>% 
  summarise(total=sum(result)) %>% 
  filter(total>10)

【讨论】:

  • 这很好用,你能解释一下代码吗,dplyr 的新手
  • 当然,你不明白哪一部分?看看tidyverse.org
猜你喜欢
  • 2021-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 2019-06-12
  • 2015-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多