使用dplyr的管道功能将数据导出为R中的data.frame对象

使用dplyr的管道功能将数据导出为R中的data.frame对象,r,dplyr,R,Dplyr,我在data.frame中有数据,我将尝试dplyr包的管道功能,以在R中执行一些管道操作。例如,给定dataframe对象,首先我将执行子集,然后导出为csv文件格式。我正在研究dplyr软件包的特性,因此对此并不完全理解。有什么帮助吗? 以下是模拟的简单可再现示例: a <- GRanges( seqnames=Rle(c("chr1", "chr2", "chr3", "chr4"), c(3, 2, 1, 2)), ranges=IRanges(seq(1, by=9, l

我在data.frame中有数据,我将尝试dplyr包的管道功能,以在R中执行一些管道操作。例如,给定dataframe对象,首先我将执行子集,然后导出为csv文件格式。我正在研究dplyr软件包的特性,因此对此并不完全理解。有什么帮助吗? 以下是模拟的简单可再现示例:

a <- GRanges(
  seqnames=Rle(c("chr1", "chr2", "chr3", "chr4"), c(3, 2, 1, 2)),
  ranges=IRanges(seq(1, by=9, len=8), seq(7, by=9, len=8)),
  rangeName=letters[seq(1:8)], score=sample(1:20, 8, replace = FALSE))
a%子集(pvalue<1e-4&pvalue>1e-9)
然后想利用dplyr的特性做几个管道操作:

a %>% subset(pvalue < 1e-4 & pvalue > 1e-9) %>% write.table(x, "foo.csv") %>% as.data.frame(x)
a%%>%子集(pvalue<1e-4&pvalue>1e-9)%%>%write.table(x,“foo.csv”)%%>%as.data.frame(x)

但当我做第二步时,我有一个错误。如果我需要做一些管道工作,比如第一个的结果在第二个中使用,那么我如何使用dplyr包在R中进行这项工作?感谢使用
iris
,您可以:

一些旁白:

  • 子集
    更像是一种基本的R方法。为什么不使用,例如
    过滤器
    选择
    ,等等
  • 管道参数(现在不仅仅是一个
    dplyr
    操作符)将左侧作为第一个参数抛出到右侧,因此
    write.table(x,…)
    无法按预期工作
  • 由于
    dplyr
    data.frame
    s一起工作,您不需要
    as.data.frame

如果您想提取几个不同的子集并写出它们,您可能需要使用
groupby
do
。首先创建一个分类变量,将数据拆分为所需的子集。下面是一个有效的示例:

iris %>% mutate(
        slcat    = cut(Sepal.Length, c(0, 4, 5, 6, 8)),
        filename = paste0("file", slcat, ".csv")
      ) %>% 
      group_by(slcat) %>% 
      do(result = write.csv(., file = .$filename[1]))

如果你需要写在一个链的中间,使用MaGriTr的代码> %t> % >谢谢你的快速响应。是否有任何现有的线程可以更具体地解释dplyr的管道特性?我想知道我需要看看它并学习。见上面的链接/。完美的起点;-)谢谢,我会处理的。我已经接受文森特的回答了。在这种情况下,我也应该接受你的吗?这两个答案对我来说都是可行的。谢谢你这一个很好;-)
iris %>% filter(Sepal.Length > 5.2) %>% write.table("foo.csv")
iris %>% mutate(
        slcat    = cut(Sepal.Length, c(0, 4, 5, 6, 8)),
        filename = paste0("file", slcat, ".csv")
      ) %>% 
      group_by(slcat) %>% 
      do(result = write.csv(., file = .$filename[1]))