【问题标题】:How to conditionally replace values in r data frame using if/then statement如何使用 if/then 语句有条件地替换 r 数据框中的值
【发布时间】:2018-01-15 18:54:29
【问题描述】:

我想了解如何使用 if/then 语句有条件地替换 R 数据框中的值。假设我有一个像这样的数据框:

df <- data.frame(
customer_id = c(568468,568468,568468,485342,847295,847295),
customer = c('paramount','paramount','paramount','miramax','pixar','pixar'));

我想做一些类似的事情, “如果客户在 ('paramount','pixar') 使 customer_id 为 99。否则什么都不做”。我正在使用此代码,但它不起作用:

if(df$customer %in% c('paramount','pixar')){
df$customer_id == 99
}else{
df$customer_id == df$customer_id
}

我收到一条警告消息,例如条件长度 > 1,并且只会使用第一个元素。并且这些值不会被替换。

我也想知道如何使用逻辑运算符来执行类似的操作, "如果 customer_id >= 500000,将 customer 替换为 'fox'。否则,什么也不做。

在 SQL 中很容易做到,但在 R 中似乎无法解决。

我的感觉是我在某处缺少括号?

如何使用 if/then 语句有条件地替换 R 数据框中的值?

【问题讨论】:

    标签: r if-statement


    【解决方案1】:

    你可以使用ifelse,像这样:

    df$customer_id <- ifelse(df$customer %in% c('paramount', 'pixar'), 99, df$customer_id)
    

    语法很简单:

    ifelse(condition, result if TRUE, result if FALSE)
    

    这是矢量化的,因此您可以在数据框列上使用它。

    【讨论】:

      【解决方案2】:

      您在 if 块中使用 == 而不是 =(赋值运算符)。而且我认为您的示例中不需要 else 块,因为您不会更改值

       if(df$customer %in% c('paramount','pixar')){
        df$customer_id = 99
       }
      

      以上代码将为您完成这项工作

      【讨论】:

      • 如果我想查看列中的元素是另一列中的元素怎么办?我收到警告消息,条件长度 > 1,并且只会使用第一个元素。我使用的语法是 if(df1$column1 %in% df2$column1) { df$column2 = 0 }
      • 您想逐行执行上述操作,还是一般对 column1 和 column2 执行上述操作?
      • 是的,我认为你是对的。如何有条件地测试,并按行应用操作?
      • 您可以使用 apply 进行逐行操作。
      猜你喜欢
      • 2011-08-15
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 2023-04-05
      相关资源
      最近更新 更多