首页 文章

用另一个数据帧r替换数据帧中的值

提问于
浏览
1

我有一个表示折叠变化的数据框,如下所示:

> df1 <- data.frame(A=c(1.74,-1.3,3.1), B=c(1.5,.9,.71), C=c(1.1,3.01,1.4))
      A    B    C
1  1.74 1.50 1.10
2 -1.30 0.90 3.01
3  3.10 0.71 1.40

并且pvalues的数据帧同样匹配行和列:

> df2 <- data.frame(A=c(.02,.01,.8), B=c(NA,.01,.06), C=c(.01,.01,.03))
     A    B    C
1 0.02   NA 0.01
2 0.01 0.01 0.01
3 0.80 0.06 0.03

我想要的是修改df1中的值,以便只保留df2 <.05中具有相应pvalue的值,否则替换为NA . 注意df2中也有NA .

> desired <- data.frame(A=c(1.74,-1.3,NA), B=c(NA,.9,NA), C=c(1.1,3.01,1.4))
> desired
      A   B    C
1  1.74  NA 1.10
2 -1.30 0.9 3.01
3    NA  NA 1.40

我首先尝试在这些数据帧上使用矢量语法,但这不起作用 . 然后我按列尝试了for循环,但也失败了 .

我不认为我理解如何索引每个i,j位置,然后用基于逻辑的df2值替换df1值 .

或者如果在R中有更好的方法

2 回答

  • 4

    你可以试试这个:

    df1[!df2 < 0.05 | is.na(df2)] <- NA
    

    日期:

    > df1
          A   B    C
    1  1.74  NA 1.10
    2 -1.30 0.9 3.01
    3    NA  NA 1.40
    
  • 1

    ifelseas.matrix 似乎可以解决问题 .

    df1 <- data.frame(A=c(1.74,-1.3,3.1), B=c(1.5,.9,.71), C=c(1.1,3.01,1.4))
    df2 <- data.frame(A=c(.02,.01,.8), B=c(NA,.01,.06), C=c(.01,.01,.03))
    
    x1 <- as.matrix(df1)
    x2 <- as.matrix(df2)
    
    as.data.frame( ifelse( x2 >= 0.05 | is.na(x2), NA, x1) )
    

    结果

    A   B    C
    1  1.74  NA 1.10
    2 -1.30 0.9 3.01
    3    NA  NA 1.40
    

相关问题