小编abb*_*786的帖子

删除反向重复行

我有data.table两列基因,每一行都被视为一对。一些基因对以相反的顺序被复制。我正在寻找一种更快的方法,最好不使用像我提供的那样的循环,以在我的表中保留唯一的对。

library(data.table)
genes <- data.table(geneA = LETTERS[1:10], geneB = c("C", "G", "B", "E", "D", "I", "H", "J", "F", "A"))

revG <- genes[,.(geneA = geneB, geneB = geneA)]
d <- fintersect(genes, revG)

for (x in 1:nrow(d)) {
  entry <- d[,c(geneA[x], geneB[x])]; revEntry <- rev(entry)
  dupEntry <- d[geneA %chin% revEntry[1] & geneB %chin% revEntry[2]]
  if (nrow(dupEntry) > 0) {
    d <- d[!(geneA %chin% dupEntry[,geneA] & geneB %chin% dupEntry[,geneB])]
  }
}
Run Code Online (Sandbox Code Playgroud)

表对象d包含重复的、反向的对。循环后,每个副本都剩余一份。我使用了原始基因表并取了一个子集,排除了其中的副本d并存储了索引。我有一个列表,其名称与genes. 索引用于根据循环删除的重复对过滤列表。

idx <- …
Run Code Online (Sandbox Code Playgroud)

performance r duplicates data.table

5
推荐指数
1
解决办法
898
查看次数

增加每第n个范围R.

我正在编写R代码,其中有一个向量'x',其中包含值1到100,我想创建另一个向量'y',它在每第n个范围内设置一系列值.我确定我可以使用rep()和seq(),但我无法找出代码来获得我需要的东西.这是输出应该是什么样子

x <- 1:100

y <- 1 2 3 11 12 13 21 22 23 31 32 33 41 42 43 51 52 53 61 62 63 71 72 73 81 82 83 91 92 93
Run Code Online (Sandbox Code Playgroud)

所以如果我有一个向量x < - 1001:1100,x [y]应该返回:

  1001 1002 1003 1011 1012 1013 1021 1022 1023 1031 1032 1033 1041 1042 1043...etc
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

r sequence auto-increment

2
推荐指数
1
解决办法
135
查看次数

通过从另一列R分组来标记列中的每个值

我有一个不寻常的数据集,我需要使用,我已经创建了一个小规模,可重现的例子.

library(data.table)
DT <- data.table(Type = c("A", rep("", 4), "B", rep("", 3), "C", rep("", 5)), Cohort = c(NA,1:4, NA, 5:7, NA, 8:12))
dt <- data.table(Type = c(rep("A", 4), rep("B", 3), rep("C", 5)), Cohort = 1:12)
Run Code Online (Sandbox Code Playgroud)

我需要DT看起来像dt实际的数据集有680万行.我意识到这可能是一个简单的问题,但我似乎无法弄清楚,也许setkey吧?任何帮助表示赞赏,谢谢.

r data.table

1
推荐指数
1
解决办法
36
查看次数

从Gencode解析GTF文件

我使用该data.table包编写了一个脚本来解析GENCODE gtf文件的最后一列.对于那些不知道的人来说,该列包含一些键值项,每行由一个分号分隔.我正在使用的特定文件包含大约250万行.我索引前100个,然后前1000行只是为了测试脚本,输出正是我需要的.但是,尽管使用了该set功能,但运行时间并不像我预期的那么快.它是前100行的瞬间,但前1000行需要大约一两分钟.这是脚本.

#LOAD DATA.TABLE LIBRARY
require(data.table)
#READ GTF ANNOTATION FILE
info <- fread("gencodeAnnotation.gtf")
colnames(info)[9] <- "AdditionalInfo"
info <- info[1:1000]
#CREATE LIST OF 'KEYS' TO PARSE OUT
pars <- as.character(list("gene_id", "gene_type", "gene_status", "gene_name", " level ", "transcript_name", "transcript_id", "transcript_type", "transcript_support_level", "havana_gene"))
#NESTED FOR LOOP TO PARSE KEY-VALUE PAIR
for (i in 1:length(pars)) {
    for (j in 1:nrow(info)) {
        infoRow <- info[,tstrsplit(AdditionalInfo, ';', fixed = T)][j]
        headerCheck <- like(infoRow, pars[i])
        if (any(headerCheck) == TRUE) {
          keyVal <- length(tstrsplit(infoRow[[which(headerCheck …
Run Code Online (Sandbox Code Playgroud)

performance r bioinformatics gtfs data.table

0
推荐指数
1
解决办法
1382
查看次数