如果R中有两列匹配,则替换值

时间:2017-07-18 02:10:37

标签: r

我对R有所了解,但是自从我使用它以来已经有一段时间了。我将不胜感激任何有关此问题的帮助或提示。如果我有两列数值(数据帧),我如何比较它们,以便如果两列的第一行相等,它们中的值将替换为单词“EQUAL”或“MATCH”或“NA” ,如果它们不相等,那些特定行的值是否保持不变?我不想创建一个具有正确/不正确值的新列,我需要保持相同的列数并替换它们中的数据。这是一个if功能吗?

我还需要第一列,即Sample#列,在输出中保持完全相同。

以下是一个例子:

原始文件的样子(Au =具有正确数据的列,Au_ppb =不正确的数据):

Sample#  Au  Au_ppb  
3000    0.2  0.2    
3001    0.2  >3      
3002    0.2  0.2    
3003    0.2  0.2
3004    0.3  1.0

之后应该是什么样子:

Sample#  Au   Au_ppb 
3000    EQUAL EQUAL  
3001    0.2   >3    
3002    EQUAL EQUAL
3003    EQUAL EQUAL
3004    0.3   1.0

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我们可以得到相等值的索引,并用我们的首选文本(这里是“EQUAL”)替换它们。

app.controller('listController', ["$scope", function($scope)  {

或者单行:

ind <- df$Au == df$Au_ppb
df[ind, c("Au", "Au_ppb")] <- "EQUAL"

#  Sample    Au Au_ppb
#1   3000 EQUAL  EQUAL
#2   3001   0.2     >3
#3   3002 EQUAL  EQUAL
#4   3003 EQUAL  EQUAL
#5   3004   0.3    1.0

答案 1 :(得分:1)

replace(x = df,
        list = cbind(which(df$Au == df$Au_ppb),
                     rep(c(2,3), each = length(which(df$Au == df$Au_ppb)))),
        values = "EQUAL")
#  Sample.    Au Au_ppb
#1    3000 EQUAL  EQUAL
#2    3001   0.2     >3
#3    3002 EQUAL  EQUAL
#4    3003 EQUAL  EQUAL
#5    3004   0.3    1.0