如何从另一个df的值子集中制作一个新的df?

时间:2019-09-03 19:46:01

标签: r dataframe data-manipulation data-cleaning

我有一个如下所示的df:

    gene ID  Probe ID Chromosome     Start      Stop
    1:   H3F3A 539154271          1 226259488 226259567
    2:   H3F3A 539154249          1 226259368 226259447
    3:   H3F3A 539154244          1 226259238 226259317
    4:   H3F3A 539154241          1 226259118 226259197
    5:   H3F3A 539154231          1 226258998 226259077
    6:   H3F3A 539154255          1 226258868 226258947

df包含7830行,分别对应40个不同的基因ID。

从这个df中,我想获得一个具有40行的df,每行分别对应40个基因,其中“开始”是第一个起始值,“停止”是最后一个终止值每个基因(例如,第一个基因的起始值为226259488,终止值为226258947。 新的df看起来像(例如第一个基因ID):

    gene ID  Probe ID Chromosome     Start      Stop
    1:   H3F3A 539154271          1 226259488 226258947

任何帮助都会很棒。 谢谢

1 个答案:

答案 0 :(得分:1)

基于格式,它看起来像data.table,因此使用data.table方法(按“基因ID”,“染色体”分组)可获得“开始”的first ,“停止”和其他列中的last,汇总数据

library(data.table)
df[, .(`Probe ID` = first(`Probe ID`), Start = first(Start),
     Stop = last(Stop)), by = .(`gene ID`, Chromosome)]