如果一个样本出现在另一个数据集的行中,如何有条件地计数和记录?
我有一个IDS(DataSet1)的遗传数据集和一个相互交互的ID数据集(DataSet2).我正在尝试计算DataSet1中的ID,这些ID出现在DataSet2中的两个交互列中的任何一个中,还记录了第三列中的交互/匹配ID. dataset1: ID 1 2 3 dataset2: Interactor1 Interactor2 1 5 2 3 1 10 输出: ID InteractionCount Interactors 1 2 5, 10 2 1 3 3 1 2 因此,输出包含DataSet1的所有ID,并且这些ID的计数也出现在DataSet2的第1列或2列中,如果它显示了
6 2024-03-31
编程技术问答社区
用data.table为一个组的每个元素创建一个 "索引"。
我的数据由v6中的ID分组,并按位置(v1:v3)排序: dt V1 V2 V3 V4 V5 V6 1: chr1 3054233 3054733 . + ENSMUSG00000090025 2: chr1 3102016 3102125 . + ENSMUSG00000064842 3: chr1 3205901 3207317 . - ENSMUSG00000051951 4: chr1 3206523 3207317 . - ENSMUSG00000051951 5: chr1 3213439 3215632 . - ENSMUSG00000051951 6: chr1 3213609 3216344 . - ENSMUSG00000051951 7: chr1 3214482 3216968 . - ENSMUSG00000051951 8: chr1 342170
16 2024-03-31
编程技术问答社区
使用data.table函数foverlaps查找两个表格中重叠范围的交点
我想使用 foverlaps 查找两个床文件的相交范围,并将包含重叠范围的所有行倒入一行.在下面的示例中,我有两个具有基因组范围的表.这些表被称为"床"文件,其基于零的启动坐标和染色体中功能的一个基于一个的结尾位置.例如,启动= 9,停止= 20被解释为跨越碱基10到20,包含在内.这些床文件可以包含数百万行.该解决方案都需要给出相同的结果,而不管提供两个要相交的文件的顺序. 第一个表 > table1 CHROMOSOME START STOP 1: 1 1 10 2: 1 20 50 3: 1 70 130 4: X 1 20 5: Y 5 200 第二个表 > table2 CHROMOSOME START STOP 1: 1 5 12 2: 1 15
12 2024-03-31
编程技术问答社区
如何在 data.table 中基于分类变量以编程方式创建二进制列?
我有一个大(1200万行)data.table,看起来像这样: library(data.table) set.seed(123) dt dt id y 1: 1 b 2: 1 d 3: 1 c 4: 1 e 5: 1 e 6: 2 a 7: 2 c 8: 2 e 9: 2 c 10: 2 c 11: 3 e 12: 3 c 13: 3 d 14: 3 c 15: 3 a 我想创建一个新的data.table包含我的变量id(这将是此新的data.table的唯一键)和5个其他二进制变量,每个变量都与y的每个类别相对应1如果ID具有y的值,0否则. 输出data.table应该看起来像这样: id a b c d e 1: 1 0 1 1 1 1 2: 2
10 2024-03-30
编程技术问答社区
二进制搜索DT,键在两列上,使用替代(OR)而不是连词。
我正在尝试使用替代方案而不是连词来找到用两个键过滤DT的方法. Dplyr中的解决方案看起来像这样: filter(DF, A == a | B == b) 我试图在data.table中使用A和B上的密钥设置在data.table中做同样的事情,但到目前为止都没有运气. 我不想使用DT[A == a | B == b]表格,因为向量搜索的性能较低. 让我们以下面的数据为例: DF
2 2024-03-30
编程技术问答社区
用于data.table[,lapply(.SD,Mode),by=.()]中的R-Fast Mode函数
我正在总结一个数据中的数据.表格,小组,我需要在一个组中取一个变量的单个值.我希望这个值是组的模式.我认为它需要是模式,因为通常一个组为8行,并且将有一个值以一个值,另一个左右的行是另一个值. . 这是一个简化的示例,来自以下示例: key1 2 key1 2 key1 2 key1 8 key1 2 key1 2 key1 2 key1 8 我想要这个: key1 2 我使用基本R提供的标准模式函数遇到了麻烦,因此我在此处使用了此解决方案: 最常见的值(模式)by group Mode
20 2024-03-30
编程技术问答社区
R(data.table):以最有效的方式计算连接后的平均值
我有两个massive数据集.我创建了一个简单的示例(下图)来复制数据的结构:DT_ade具有变量a,d,e,而DT_abce有变量a,b,c ,e. 我想通过a-b-c计算d的平均值.在下面的代码中,我基于a-e的值合并了两个DT.因为我对变量e不感兴趣,所以我只是在加入之后选择了剩余变量(a,b,c,d).然后,我计算了d的平均值.a-b-c library(data.table) DT_ade = data.table(a = c("a1", "a1", "a2", "a3", "a3"), d = c(10, 20, 30, 40, 80) , e = c("e1", "e2", "e2", "e2", "e3")) DT_abce = data.table(a = c("a1", "a1", "a1", "a1", "a2", "a3", "a3"),
8 2024-03-30
编程技术问答社区
是否有比fread()更快的方法来读取大数据?
嗨,首先,我已经在堆栈和Google上搜索,并在此处找到了这样的帖子: 快速将非常大的表读为dataframes .虽然这些很有帮助并且得到了很好的答复,但我正在寻找更多信息. 我正在寻找可以读取/导入"大"数据的最佳方法,该数据可以达到50-60GB. 我目前正在使用data.table>的fread()函数,目前我知道的是最快的函数.我使用的PC/服务器获得了一个很好的CPU(工作站)和32 GB RAM,但是数据仍然超过10GB,有时甚至数十亿的观察值需要很多时间才能阅读. 我们已经有SQL数据库,但是由于某些原因,我们必须在R中使用大数据. 有没有一种方法可以加快r或比fread()更好的选择? 谢谢. 编辑:fread(" data.txt",verbose = true) omp_get_max_threads() = 2 omp_get_thread_limit() = 2147483647 DTthreads = 0 RestoreAfter
14 2024-03-30
编程技术问答社区
数据表的内存限制:不允许负长度的向量
我有一个数据表,有几个社交媒体用户和他/她的追随者.原始数据表具有以下格式: X.USERID FOLLOWERS 1081 4053807021,2476584389,4713715543, ... 因此,每行都包含一个用户以及他/她的ID和一个追随者的向量(由逗号分开).我总共有24,000个独特的用户ID以及160,000,000个独特的关注者.我希望以以下格式转换我的原始表: X.USERID FOLLOWERS 1: 1081 4053807021 2: 1081 2476584389 3: 1081 4713715543 4: 1081 580410695 5: 1081 4827723557 6: 1081 704326016165142528 为了获得此数据表,我使用了以下代码行(假设我的原始数据表
8 2024-03-30
编程技术问答社区
检查一个数据框中的日期是否在另一个数据框的日期范围内,如果为真则返回行。
if (!require("pacman")) install.packages("pacman") pacman::p_load(tidyverse, lubridate) # Example of sample dates - these are to be used to cross check if date exists within the range Sample.Dates = tibble( ID = "ID", Round = 1:3, Start.Date = dmy(c("03/12/2018","10/12/2018","17/12/2018")), End.Date = dmy(c("09/12/2018","16/12/2018","23/12/2018"))) # Reference dates for a particular player - "John". Need to cross check the date against
12 2024-03-30
编程技术问答社区
提高data.table子集的性能
我正在运行一个大型蒙特卡洛模拟,我发现子制定/搜索数据是我代码中最慢的部分.为了测试一些替代方案,我用数据范围,data.table和矩阵进行了标记的性能. 这是基准代码: library(data.table) #install.packages('profvis') library(profvis) x.df = data.frame(a=sample(1:10,10000,replace=T), b=sample(1:10,10000,replace=T)) # set up a dataframe x.dt = as.data.table(x.df) # a data.table setkey(x.dt,a) # set key for faster searches x.mat = as.matrix(x.df) # a matrix profvis({ for (i in 1:10000) { # test simple subsetting xsubset.
14 2024-03-30
编程技术问答社区
说明样本限制的影响。简化制作柱状图的方法
我正在尝试通过ID说明效果,这些效果对在棒图中连续应用了各种(减少限制性的)样本限制的效果,看起来像这样: 放置了所有5个限制后,蓝色条是剩下的;金条显示了最不限制条件的影响;春季绿色条显示了第二至限制性条件的影响;等等. 这是一些示例数据: library(data.table) set.seed(8195) dt.76, flag2=!!runif(1e4)>.88,flag3=!!runif(1e4)>.90, flag4=!!runif(1e4)>.95,flag5=!!runif(1e4)>.99) 我到目前为止使用的代码还有一些需要的东西 - 1)它相当冗长,而2)它并不能使我非常强大/可概括.有人有一些经验,可以生产这样的东西可以在这两个方面提供一些改进?我感觉这种类型的图在数据分析中应该
8 2024-03-27
编程技术问答社区
R的赋值运算符:=代表什么?
通过挖掘r源代码(文件R-3.2.2/src/main/gram.y行2836 to 2852)我发现R Parser/Tokenizer认为:=是:=是LEFT_ASSIGNMENT token. 但是,当试图将其用作R.3.2.2的分配运算符时, 我有一个错误(无法找到:= ... ...),但是如您所见,R将其视为 myVar := 42 Erreur : impossible de trouver la fonction ":=" > := Erreur : unexpected assignment in ":=" > R的开发版本现在允许编写一些作业 C-或J
6 2024-03-17
编程技术问答社区
是否可以使用 data.table index-join-assignment 这个成语来做一个左联接,并将 i 的非匹配行中的 NAs 赋值给 x?
昨天我给出了这个答案:五列匹配数据表,以更改另一列中的值. 在评论中,OP询问我们是否可以有效地实现两个表的左连接,从而获得NAS,从而导致右表分配给左表.在我看来,数据.表不提供任何这样做的手段. 这是我在该问题中使用的示例案例: set.seed(1L); dt1
10 2024-03-17
编程技术问答社区