相关疑难解决方法(0)

如何制作一个很好的R可重复的例子

在与同事讨论性能,教学,发送错误报告或在邮件列表上搜索指导时,以及在Stack Overflow上,通常会询问可重复的示例并始终提供帮助.

您有什么建议创建优秀示例的提示?如何以文本格式粘贴中的数据结构?您还应该包含哪些其他信息?

在另外还有其他招数来使用dput(),dump()structure()?你什么时候应该包括library()require()声明?其中保留字应避免一个,此外c,df,data等?

怎样才能成为一位伟大的重复的例子?

r r-faq

2474
推荐指数
23
解决办法
28万
查看次数

删除反向重复行

我有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
查看次数

如何加快在数据表中查找反转行的过程

给定data.tableR 中的 a,我想找到与前一行相反版本的行。例如:

>head(DT)
   V1      V2 
 1 nameA   nameB 
 2 nameA   nameC
 3 nameB   nameA
 4 nameB   nameF
 5 nameN   nameP
 6 nameP   nameN
Run Code Online (Sandbox Code Playgroud)

在 的情况下row 1,代码应返回row 3。在 的情况下row 5,代码应返回row 6。最终,我想删除“反向”行。

真实数据集有 50 万行和 2 列。目前我正在使用这段代码,它完成了这项工作:

require(foreach)
require(doMC)
registerDoMC(4)
rm.idx <- c()
rm.idx <- foreach(i=1:nrow(DT), .combine = 'c')%dopar%{
       if (!(i %in% rm.idx)) which(DT[i,1] == DT[,2] & DT[i,2] == DT[,1])
}      
Run Code Online (Sandbox Code Playgroud)

代码“返回”一个向量 ( rm.idx),其中包含前一行的反向版本的那些行的索引。

但是,对于相对“小”的数据集需要很长时间(超过 30 分钟)。我经常发现 R 有一些调整或一些功能可以更快地完成技巧(或者,我的代码效率不高)。因此,我想知道是否有人知道查找与前一行相反的行的更快方法 …

reverse r data.table

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

从R中的数据框中删除重复的行

我有两列,只想保留非交换行.对于下面的数据,我的输出应该包含一个(1 2)的组合.即我的查询(1 2)与(2 1)相同.有没有一种简单的方法在R中做到这一点.已经尝试过调换.并保留上部的traingular矩阵.但转移数据变得很痛苦.

A B prob
1 2 0.1
1 3 0.2
1 4 0.3
2 1 0.3
2 3 0.1
2 4 0.4
Run Code Online (Sandbox Code Playgroud)

我的最终输出应该是:

A B prob
1 2 0.1
1 3 0.2
1 4 0.3
2 3 0.1
2 4 0.4
Run Code Online (Sandbox Code Playgroud)

transpose r matrix reshape reshape2

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