首页 > 解决方案 > 用嵌套的 ifelse 替换数据框中的值

问题描述

我需要根据条件替换data.frame中的某个值,如下所示:

for (i in 1:nrow(DS)){
  if (DS$Date1[i] == DS$Date2[i]){
    DS$Time2[i] <- DS$Time1[i]
  }else if (DS$Date3[i] == DS$Date2[i]) {
    DS$Time2[i] <- DS$Time3[i]
  }else if (DS$Date4[i] == DS$Date2[i]) {
    DS$Time2[i] <- DS$Time4[i]
  }else {
    DS$Date1[i] <- DS$Date2[i]
  }
}

但 ifelse 条件返回错误: if (condition) { 中的错误:需要 TRUE/FALSE 的缺失值。你能帮我解决这个嵌套的 ifelse 或其他解决方案吗?

标签: rfor-loopreplace

解决方案


正如 tmrlvi 发布的那样,答案是将 == 替换为 %in%,因为如果数据集中有 NA 语句,它就不会像假装的那样工作。

for (i in 1:nrow(DS)){
  if (DS$Date1[i] %in% DS$Date2[i]){
    DS$Time2[i] <- DS$Time1[i]
  }else if (DS$Date3[i] %in% DS$Date2[i]) {
    DS$Time2[i] <- DS$Time3[i]
  }else if (DS$Date4[i] %in% DS$Date2[i]) {
    DS$Time2[i] <- DS$Time4[i]
  }else {
    DS$Date1[i] <- DS$Date2[i]
  }
}

推荐阅读