【问题标题】:R calculate summary dataframe from dataframe with multiple columns of informationR从具有多列信息的数据框中计算摘要数据框
【发布时间】:2014-11-20 20:13:09
【问题描述】:

我有一个包含多列信息的数据框,例如:

df <- data.frame(chr=c("chr1", "chr1", "chr1", "chr1", "chr1", "chr1", "chr1", "chr1", "chr2", "chr2"), Gene=c("Happy", "Happy", "Happy", "Happy", "Happy", "Happy", "Happy", "Happy", "Sad", "Sad"), site = c(100, 120, 130, 300, 2000, 2300, 2342, 2451, 120, 123), value=c(20, 25, 21, 30, -80, 31, -79, -90, 10, 13))

> df
    chr  Gene site value
1  chr1 Happy  100    20
2  chr1 Happy  120    25
3  chr1 Happy  130    21
4  chr1 Happy  300    30
5  chr1 Happy 2000   -80
6  chr1 Happy 2300    31
7  chr1 Happy 2342   -79
8  chr1 Happy 2451   -90
9  chr2   Sad  120    10
10 chr2   Sad  123    13

我想创建一个汇总数据框,用于计算每个基因有多少个聚集区域。我认为一个集群有任意数量的行,其中站点编号的差异不大于 1,000(我的数据按 chr 和站点排序)。 首先,我创建了一个新列来计算连续行中站点之间的距离:

df$Distance <- c(1001, diff(df$site, lag=1, differences=1))

> df
    chr  Gene site value Distance
1  chr1 Happy  100    20     1001
2  chr1 Happy  120    25       20
3  chr1 Happy  130    21       10
4  chr1 Happy  300    30      170
5  chr1 Happy 2000   -80     1700
6  chr1 Happy 2300    31      300
7  chr1 Happy 2342   -79       42
8  chr1 Happy 2451   -90      109
9  chr2   Sad  120    10    -2331
10 chr2   Sad  123    13        3

我想创建一个汇总表,其中每个基因都有一行,总结了在每个基因中发现的平均值为正或负的簇的数量。 在上面的示例中,表格如下所示:

   Gene PositiveClusters NegativeClusters
1 Happy                1                1
2   Sad                1                0

【问题讨论】:

  • @beginneR 我认为集群是一组站点,其中两个站点之间的距离不大于 1,000。这就是为什么我计算了两个站点之间的距离,如果距离大于 1000,那么该站点就是新集群的开始。

标签: r dataframe summarization


【解决方案1】:

这是一个 data.table 解决方案 - 但我觉得有一种更有效的方法......

library(data.table)
setDT(df)[,cluster:=c(0,cumsum(diff(site)>1000)),by=Gene]
df[,mean:=mean(value),by=list(Gene,cluster)]
df[,list(pos=length(unique(cluster[mean>=0])),
         neg=length(unique(cluster[mean<0]))),by=Gene]
#     Gene pos neg
# 1: Happy   1   1
# 2:   Sad   1   0

因此,这会将df 转换为data.table,并基于cumsum(diff(site)&gt;1000) 添加一列cluster,并按Gene 分组。这是生成分组变量的一种非常典型的模式。

然后我们添加一列mean,它是由Genecluster 分组的mean(value)

然后我们创建一个新的 data.table,其中包含每个集群类型的计数,平均值为正 (>= 0) 或负 (Gene 分组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 2014-04-09
    相关资源
    最近更新 更多