如何将函数应用于R中因子的每个子集

时间:2016-12-07 02:09:13

标签: r

我有一个数据框,其中包含一个bin大小,一系列属于每个bin的元素,以及由factor" state"定义的每个元素的重叠量。以下是三个不同级别(16_Rpt,18_LowL,5_EnhM)的小例子。

chr bin_start bin_stop state_start state_stop state overlap
chr1 3000000 3500000 3325000 3325800 16_Rpt 800
chr1 3000000 3500000 3325800 3390000 18_LowL 64200
chr1 3000000 3500000 3390000 3390200 5_EnhM 200
chr1 3500000 4000000 3390200 3504800 18_LowL 4800
chr1 3500000 4000000 3504800 3505400 5_EnhM 600
chr1 3500000 4000000 3505400 3541000 18_LowL 35600
chr1 4000000 4500000 3794200 4155600 18_LowL 155600
chr1 4000000 4500000 4155600 4156600 16_Rpt 1000
chr1 4000000 4500000 4156600 4166200 18_LowL 9600

我想为每个bin中的所有级别添加重叠。最后,一旦添加了重叠,我将删除特定bin中每个级别的所有重复项。

我尝试使用by为所有重复的二进制数据框进行子集化,然后对每个级别的#34;状态":

应用此子集的总和
df <- by(df[duplicated(df$bin_start) | duplicated(df$bin_start,fromLast = TRUE),],
         df$overlap,
         sum)

但是我收到以下错误:

  

tapply错误(seq_len(36386L),列表(df$overlap   = c(500000L,:参数必须具有相同的长度调用:by ... by.data.frame - &gt; structure - &gt; eval - &gt; eval - &gt; tapply

有人可以指出这种方法有什么问题吗? (我希望这个错误不会脱离上下文,因为它是在一个更大的帧上提供更多级别的。)

0 个答案:

没有答案