感谢您的帮助!我不是 R 专家,但有一些使用它的经验,我有一个我想弄清楚的难题。在这种情况下,我正在运行模拟以创建事件的子系列:
# A tibble: 20 x 3
GeneID counts Freq
<fct> <int> <dbl>
1 1.1 3 0.0000132
2 1.2 4 0.0000176
3 1.3 5 0.0000220
4 1.4 2 0.00000880
5 10.1 1 0.00000440
6 10.2 4 0.0000176
7 10.3 1 0.00000440
8 10.4 2 0.00000880
9 10.5 3 0.0000132
10 100.1 5 0.0000220
11 100.2 5 0.0000220
12 100.3 2 0.00000880
13 100.4 2 0.00000880
14 100.5 2 0.00000880
在 GeneID 中,我有 1.1、1.2、1.3 和 1.4,它们是 Gene 1 的变体(其他原理相同)。是否可以使用 dplyr 中的 group_by 将变体折叠为单个组?IE。1.1 1.2 1.3 1.4 分组为 1 并对相关计数求和(以此类推)?
我想过使用 trunc() 创建另一列来删除小数,但这些数据集可能非常大....
先感谢您。
您走在正确的轨道上,您可以通过删除"."
in之后的所有内容来创建一个新列,GeneID
并sum
为每个唯一值取值。
library(dplyr)
df %>%
group_by(Gene_group = sub('\\..*', '', GeneID)) %>%
summarise(Freq = sum(Freq))
# Gene_group Freq
# <chr> <dbl>
#1 1 0.0000616
#2 10 0.0000484
#3 100 0.0000704
如果你的数据集很大并且你担心性能,你也可以使用上面的data.table
方法。
library(data.table)
setDT(df)[, Gene_group := sub('\\..*', '', GeneID)]
df[, sum(Freq), Gene_group]
数据
df <- structure(list(GeneID = c(1.1, 1.2, 1.3, 1.4, 10.1, 10.2, 10.3,
10.4, 10.5, 100.1, 100.2, 100.3, 100.4, 100.5), counts = c(3L,
4L, 5L, 2L, 1L, 4L, 1L, 2L, 3L, 5L, 5L, 2L, 2L, 2L), Freq = c(1.32e-05,
1.76e-05, 2.2e-05, 8.8e-06, 4.4e-06, 1.76e-05, 4.4e-06, 8.8e-06,
1.32e-05, 2.2e-05, 2.2e-05, 8.8e-06, 8.8e-06, 8.8e-06)),
class = "data.frame", row.names = c(NA, -14L))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句