【发布时间】:2016-05-26 10:46:58
【问题描述】:
我有:
- 包含 ODB6_OD_ID、Gene_ID 和其他一些列的数据框 test_var。
- 具有架构编号、详细信息和序列的数据帧排列数据。 (序列数据不相关)
我想查明arranged_data$Details 是否包含来自test_var$ODB6_OD_ID 的任何值。也就是说,如果arranged_data$Details 中的字符串包含一个子字符串,该子字符串是test_var$ODB6_OD_ID 中的任何值。如果序列存在,则将相应 ODB6_OD_ID 的 test_var$Gene_ID 附加到文件中。
我必须为每个 architecture_number 执行此操作。大约有 18 种架构,总数据集为 5660。
这是我编写的代码,但它花费的时间太长,我认为这是因为大循环: (这仅适用于架构 1。我必须为 1-18 的架构做) (架构 1 包含大约 350 多个序列)
while (arranged_data$architecture_number==1)
{
if(grepl(arranged_data$V2,test_var$ODB6_OG_ID)==TRUE)
{
write.table(test_var$Gene_ID, file = "architecture1", append = TRUE, sep = '\n')
}
}
我的数据集如下所示: 测试变量:
ODB6_OG_ID start Gene_ID
EOG60024F chrXR_group6 FBgn0247618
EOG60024H chr4_group3 FBgn0070413
EOG60024K chr2 FBgn0078093
EOG60024M chr2 FBgn0243975
EOG60024V chr4_group5 FBgn0247694
EOG60025C chrXL_group1a FBgn0247949
EOG60025F chr3 FBgn0245234
EOG602XCD chr4_group3 FBgn0080574
EOG602XCQ chr4_group3 FBgn0078791
arranged_data 包含:
architecture_number Details
1 chr317678741767875EOG6HQF5814.8092+47
1 chr325176942517695EOG6NKCGX23.1869-87
1 chr391494069149407EOG6NZVDZ2.96183+105
1 chr246642624664263EOG6Z638J1.52323+138
1 chr4_group3231407231408EOG6QRHQP4.65431-721
1 chr311648221164823EOG6X3HNJ2.28484+96
1 chr333466933346694EOG66WZW582.1698+678
1 chrXR_group854636745463675EOG6XH0KP1.86172+57
1 chr283746518374652EOG6V17MG2.45409-68
1 chr31338293913382940EOG63XVQR1.60785+105
需要的输出: FBgn0247618 FBgn0070413 FBgn0078093等
(这些不按顺序排列。)
其他信息: 操作系统:Ubuntu Xenial Xerus 16.04 R版本:3.3.0 RStudio 版本:0.99.902
【问题讨论】:
-
请提供minimal reproducible example。此外,将数据保存在数据帧中,然后写入磁盘可能比每次迭代写入磁盘要快。
标签: r string dataframe substring