【问题标题】:How to replace values in df that are NOT fulfilling condition如何替换 df 中不满足条件的值
【发布时间】:2020-04-02 23:42:01
【问题描述】:

我正在尝试清理我的数据,但找不到替换不符合我的条件的值的方法,如下例所示:

df1<-  data.frame(
A=c("a","b","c"),
Ch=c("c1","xyz","c2"),
val=paste0("x",1:3),  stringsAsFactors = FALSE)

所有不同于 c1、c2 的值我都想改成“其他”。

我试过了:

for( i in 1:length(df)
if (df[i,2]==c1 | c2){
stay same vaue?!?
} else df[i,2] <- "other"

这不起作用。

有什么建议吗?

【问题讨论】:

  • 如果答案符合您的需要,请随时将其标记为已接受 :)

标签: r dataframe replace negate


【解决方案1】:

如果您只想更改一列,这是另一种基本 R 解决方案

df1<-  data.frame(
A=c("a","b","c"),
Ch=c("c1","xyz","c2"),
val=paste0("x",1:3),  stringsAsFactors = FALSE)

df1$Ch[df1$Ch!="c1" &amp; df1$Ch!="c2"] &lt;- "other"

这将仅替换 Ch 列

【讨论】:

    【解决方案2】:

    为了可复制性:

    df1<-
    tibble(
      A=c("a","b","c"),
      Ch=c("c1","xyz","c2"),
      val=paste0("x",1:3)
    )
    

    如果您尝试在所有列中执行此操作:

    library(tidyverse)
    
    df1%>%mutate_all(list(~ifelse(.=="c1"|.=="c2",.,"other")))
    

    基础 R 解决方案:

    data.frame(
    sapply(
      df1,
      function(x)ifelse(x=="c1"|x=="c2",x,"other")
     )
    )
    

    【讨论】:

    • 在基础 R 中,您可以只使用 df1[df1!="c1" &amp; df1!="c2"] &lt;- "other",假设这些列是字符串而不是因子。
    猜你喜欢
    • 2019-02-03
    • 2018-08-24
    • 1970-01-01
    • 2020-08-18
    • 2022-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    相关资源
    最近更新 更多