【问题标题】:How do you add a new conditional column with the following logic applied at each row: if B[i] = A[i] then print C[i] else print B[i] in R dataframe如何添加一个新的条件列,并在每一行应用以下逻辑: if B[i] = A[i] then print C[i] else print B[i] in R dataframe
【发布时间】:2019-09-03 13:26:05
【问题描述】:

我正在尝试找出正确的方法来实现代码以在 R (Mut) 中创建一个新列,条件如下:

如果 RareNuc[i] = Ref[i] 那么 Frequencies$Mut

其他频率$Mut

起始数据框:

> Frequencies
RareNuc Ref CommNuc
A   A   A
A   A   A
C   C   C
C   C   C
T   T   T
T   T   T
G   G   G
G   G   A
T   C   C
G   G   A
A   A   G
T   C   C
G   G   A
C   C   A
T   G   G
T   C   C
A   C   C
A   A   G

理想输出:

> Frequencies
RareNuc Ref CommNuc Mut
A   A   A   A
A   A   A   A
C   C   C   C
C   C   C   C
T   T   T   T
T   T   T   T
G   G   G   G
G   G   A   A
T   C   C   T
G   G   A   A
A   A   G   G
T   C   C   T
G   G   A   A
C   C   A   A
T   G   G   T
T   C   C   T
A   C   C   A
A   A   G   G

我在这方面已经有一段时间了,这是我最接近工作的事情。

for (i in 1:nrow(Frequencies))
{
  if (match(Frequencies$RareNuc[i], Frequencies$Ref[i])) 
  {Frequencies$Mut[i] <- Frequencies$RareNuc[i]}
  else {Frequencies$Mut[i] <- Frequencies$CommNuc[i]}
}

在 Frequencies$Mut 的第一行中,它似乎可以工作,但是,一旦 RareNuc、Ref 和 CommNuc 列不再全部匹配,Frequencies$Mut 列开始仅输出 A。

也会产生这个错误:

if (match(Frequencies$RareNuc[i], Frequencies$Ref[i])) { 中的错误: 论点不能解释为合乎逻辑的

谢谢!

【问题讨论】:

    标签: r replace logic conditional-statements


    【解决方案1】:

    你可以用 base-R ifelse:

    Frequencies$Mut <- ifelse(Frequencies$RareNuc == Frequencies$Ref,
                              Frequencies$CommNuc, 
                              Frequencies$RareNuc)
    Frequencies
    #>     RareNuc Ref CommNuc Mut
    #>  1:       A   A       A   A
    #>  2:       A   A       A   A
    #>  3:       C   C       C   C
    #>  4:       C   C       C   C
    #>  5:       T   T       T   T
    #>  6:       T   T       T   T
    #>  7:       G   G       G   G
    #>  8:       G   G       A   A
    #>  9:       T   C       C   T
    #> 10:       G   G       A   A
    #> 11:       A   A       G   G
    #> 12:       T   C       C   T
    #> 13:       G   G       A   A
    #> 14:       C   C       A   A
    #> 15:       T   G       G   T
    #> 16:       T   C       C   T
    #> 17:       A   C       C   A
    #> 18:       A   A       G   G
    

    【讨论】:

      【解决方案2】:

      data.table 解决方案:

      library(data.table) 
      setDT(Frecuencies)[, mut := ifelse(RareNuci == Ref, CommNuci, Ref)]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-01
        • 2023-03-09
        • 1970-01-01
        • 2021-04-09
        • 2017-03-30
        相关资源
        最近更新 更多