【问题标题】:Condtional replacement of values based on columns in two dataframes基于两个数据框中的列有条件地替换值
【发布时间】:2020-10-16 18:19:31
【问题描述】:

我在下面有两个具有相同列行名的数据框。我想在 df_A 中的每个“1”中将基于 df_B 的敌人的值更改为 NA。有关我希望实现的目标,请参见“目标”。

谢谢!

日期框架 A

 ID  x1 x2 x3
  A  NA  1 NA
  B  NA  1  1
  C  NA  1 NA
  

数据框 B

 ID x1 x2 x3
  A  0  9  0
  B  10 4  6
  C  0  5  5

目标

 ID x1 x2 x3
  A  0  NA 0
  B  10 NA NA
  C  0  NA 5

关于我如何做到这一点的任何想法?我尝试使用 ifelse 函数和子集化无济于事。 谢谢大家!

【问题讨论】:

    标签: r formatting conditional-formatting


    【解决方案1】:

    我们通过检查元素是否等于 1 来创建一个包含除第一列之外的第一个数据的逻辑矩阵。使用它来子集 df2 中没有第一列的值并将它们分配给NA

    df2[-1][(df1[-1] == 1) & !is.na(df1[-1])] <- NA
    

    由于'df1'中有NA元素,我们可以使用is.na来检查不是NA并且是1的元素

    -输出

    df2
    #  ID x1 x2 x3
    #1  A  0 NA  0
    #2  B 10 NA NA
    #3  C  0 NA  5
    

    数据

    df1 <- structure(list(ID = c("A", "B", "C"), x1 = c(NA, NA, NA), x2 = c(1L, 
    1L, 1L), x3 = c(NA, 1L, NA)), class = "data.frame", row.names = c(NA, 
    -3L))
    
    df2 <- structure(list(ID = c("A", "B", "C"), x1 = c(0L, 10L, 0L), x2 = c(9L, 
    4L, 5L), x3 = c(0L, 6L, 5L)), class = "data.frame", row.names = c(NA, 
    -3L))
    

    【讨论】:

      猜你喜欢
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      相关资源
      最近更新 更多