【问题标题】:if values of two columns are equal, change the value of resultant column to NA and if not keep to original value of resultant column - using R如果两列的值相等,则将结果列的值更改为 NA ,如果不保持结果列的原始值 - 使用 R
【发布时间】:2010-09-24 01:18:07
【问题描述】:

本题与上一题类似。

我提供此示例数据来解决我的问题。

id=c(1,2,3,4,5,6,7,8,9,10) 
var1=c(0,1,2,0,6,9,0,0,3,0) 
var2=c(0,0,2,3,0,0,0,5,0,0)
var3=c(0,1,4,3,6,9,0,5,3,0) 
data=data.frame(id,var1,var2, var3) 

我需要的是: 如果值为var1==var2,则生成var3==NA,但如果不是,则保留var3 的值。 很高兴使用 R 中的 ifelse 函数完成它,但欢迎使用其他选项。

我希望问题足够清楚。

问候, 巴松

【问题讨论】:

    标签: r multiple-columns


    【解决方案1】:

    使用 ifelse 需要注意的一件事是条件是否可能为 NA。在您的情况下,使用 David 的示例代码,如果 var1 或 var2 为 NA,则 var3 将设置为 NA。

    我要么在条件中将 NAs 设置为 F,要么执行以下操作:

    var3 <- replace(var3, which(var1 == var2), NA)
    

    比较:

    data$var1[1] = NA
    with(data, ifelse(var1 == var2, NA, var3))
    # [1] NA  1 NA  3  6  9 NA  5  3 NA
    with(data, replace(var3, which(var1 == var2), NA))
    # [1]  0  1 NA  3  6  9 NA  5  3 NA
    

    【讨论】:

    • 嗨,查尔斯,你是完全正确的。在应用 David 的代码后,我进行了快速检查,它按照您所说的做了(如果 var1 或 var2 为 NA,那么 var3 将设置为 NA),这不是我在这种情况下想要的。我只是不清楚那方面......我向你道歉大卫,感谢你(查尔斯)的大力帮助!
    【解决方案2】:

    只要两个向量中没有 NA,这应该可以工作:

    var3 <- ifelse(var1 == var2, NA, var3)
    

    【讨论】:

    • 这是我使用的完整行:df$var3
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多