【发布时间】:2018-03-24 16:05:01
【问题描述】:
我正在尝试将不同细菌的 DNA 螺旋与其祖先进行匹配,我有大约 100 万次观察结果。我想为每个细菌确定最近的祖先,即我想将它们与相同或较老的一代(相等或更小的代数)进行比较,所以我的数据框看起来像这样(为简单起见,我们假设 DNA 向量由一个数字组成):
bacteria_id generation DNA_vector
213 230 23
254 230 18
256 229 39
289 229 16
310 228 24
324 228 45
我尝试创建一个矩阵并从该矩阵中为每个细菌选择最小值,但由于它将包含许多行和列,我在创建矩阵之前得到memory error。
让我们假设它不是细菌而是汽车,我将每辆汽车与它自己的一代(例如 2010 年推出的汽车)和较旧的汽车进行比较。还让我们将 DNA_vector 更改为特征数。如果功能数量之间的差异较小,我会假设它与其他汽车更相似。
所以我想创建两个额外的列。第一个将说明最小差异(例如,第一个将是 1,最相似的汽车将是 310 型)
预期输出是:
bacteria_id generation DNA_vector most_similar_bacteria distance
213 230 23 310 1 (i.e. 24 -23)
254 230 18 289 2
256 229 39 324 6
289 229 16 228 8
310 228 24 324 19
324 228 45 NA NA
你有什么建议吗?
【问题讨论】:
-
能否请您删除所有对遗传学的提及并在一个广泛的主题中提出问题?当您不知道要使用什么比较时,很难理解这个问题
-
哦好的,我会简化的
-
现在清楚了吗?
-
执行此操作的直接方法是循环您的 DF 两次。对于每一行,查看所有要比较的行。然后为每个外循环写入一个新的 DF。使用类似 SQL 的语法和一些窗口函数,这会更简单。如果您遇到问题,请写一个玩具示例,有人会解决它。
-
你能添加预期的输出吗,你想要完成什么真的很困惑。