【问题标题】:R ifelse to replace values in a columnR ifelse 替换列中的值
【发布时间】:2025-11-23 20:35:01
【问题描述】:

我的数据框中有一列如下:

Private
Private
Private
 ?
Private

我想替换这个“?”与私人。我有一个解决方案如下:

# Only replacing ? with Private 
df$var <- ifelse(df$var == " ?", " Private", df$var)

但是,当我在 ifelse 语句之后打印出 df$var 列时,这些值似乎不正确。这就是我得到的:

3
3
3
Private
3

我不知道这里出了什么问题。

【问题讨论】:

  • 试试df$var &lt;- as.character(df$var); df$var &lt;- ifelse(df$var == " ?", " Private", df$var)。变量可能是一个因素。
  • 你是对的。谢谢!
  • 如果您只想替换“?”使用df$var[df$var==" ?"] &lt;- "Private" 可能更有效。

标签: r


【解决方案1】:

这应该工作,使用工作示例:

var <- c("Private", "Private", "?", "Private")
df <- data.frame(var)
df$var[which(df$var == "?")] = "Private"

那么这将替换“?”的值与“私人”

您的替换不起作用的原因(我认为)好像df$var 中的值不是"?" 然后它将向量的元素替换为整个df$var 列,而不仅仅是重新插入你想要的元素。

【讨论】:

    【解决方案2】:

    看起来 ifelse 替代替换正在返回一个可以解释为级别的整数...尝试

    df$var <- ifelse(df$var == " ?", " Private", as.character(df$var))   
    

    【讨论】:

      【解决方案3】:

      JCollerton 的解决方案应该很好用,但如果你坚持使用 if 语句,你将不得不在 for 循环中进行:

      for(i in 1:nrow(df)){
          if(df$var[i]==" ?"){
              df$var[i]="Private"
           }
      }
      

      【讨论】: