在R中子集数据集

时间:2019-05-09 05:09:09

标签: r split subset sapply

我有一个问题,要根据计数总和来过滤数据集

我的文件如下:

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使其循环通过,但是我被困在这里。 感谢您的帮助

1 个答案:

答案 0 :(得分: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)