gpt4 book ai didi

R - 按列比较两行并将结果写入表格

转载 作者:行者123 更新时间:2023-12-02 09:26:49 24 4
gpt4 key购买 nike

我是 R 新手,可能我的问题的解决方案非常简单,但目前我无法实现...
我想按列比较数据框中的行。每列中的数据是一个字母(核苷酸碱基):

seq1 A C T G T
seq2 A C G G G
seq3 A G G C A
...

我想按列比较数据集中的所有行。我想获得的结果是比较中 TRUE 和 FALSE 的简单 1 或 0,也以表格的形式写入。所以它看起来像这样:
seq1_seq2 1 1 0 1 0
seq1_seq3 1 0 0 0 0
seq2_seq3 1 0 1 0 0
...

我的 R 技能太低,无法写出有用的东西。然而,我设法发现
ifelse(data[1,]==data[2,], 1, 0) 

尽管没有显示比较哪些行(没有 seq1_seq2 列),但几乎返回了我需要的内容。
我将不胜感激对此问题的任何帮助。当然,一个完整解决方案的例子将是最需要的,但我也会很感激有关如何解决这个问题的任何建议。

先感谢您!

最佳答案

按行在数据帧中存储序列是错误的。您应该按列存储序列,或者,如果按行存储它们,至少在矩阵而不是数据帧中进行。下面我假设您使用矩阵。您可以使用 as.matrix 将数据帧转换为矩阵功能。

如果你想避免循环,你应该使用 combn对于此类任务

> a
[,1] [,2] [,3] [,4] [,5]
seq1 "A" "C" "T" "G" "T"
seq2 "A" "C" "G" "G" "G"
seq3 "A" "G" "G" "C" "A"

> compare = t(combn(nrow(a),2,FUN=function(x)a[x[1],]==a[x[2],]))
> rownames(compare) = combn(nrow(a),2,FUN=function(x)paste0("seq",x[1],"_seq",x[2]))

> compare
[,1] [,2] [,3] [,4] [,5]
seq1_seq2 TRUE TRUE FALSE TRUE FALSE
seq1_seq3 TRUE FALSE FALSE FALSE FALSE
seq2_seq3 TRUE FALSE TRUE FALSE FALSE

将 bool 值转换为整数(如果你真的需要的话):

storage.mode(compare) = "integer"

关于R - 按列比较两行并将结果写入表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37228001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com