【问题标题】:replacing values in dataframe with another dataframe r用另一个数据框 r 替换数据框中的值
【发布时间】:2017-07-14 20:31:25
【问题描述】:

我有一个代表折叠变化的值的数据框:

> 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

> 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 位置,然后根据逻辑将 df1 值替换为 df2 值。

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

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以试试这个:

    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
    

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-09
        • 1970-01-01
        相关资源
        最近更新 更多