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

时间:2018-01-15 10:45:10

标签: r if-statement

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

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

我想做一些事情, &#34;如果客户(&#39; paramount&#39;,&#39; pixar&#39;)生成customer_id 99.否则什么都不做&#34;。我使用此代码,但它无效:

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

我收到一条警告信息,例如条件有长度&gt; 1,只使用第一个元素。并且价值不会被替换。

我也想知道如何使用逻辑运算符来执行此操作, &#34;如果customer_id&gt; = 500000,请将客户替换为&f; fox&#39;。否则,什么也不做。

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

我的感觉是我在某个地方错过了一个括号?

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

2 个答案:

答案 0 :(得分:4)

您可以使用ifelse,如下所示:

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

语法很简单:

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

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

答案 1 :(得分:0)

您在if块中使用 == 而不是 = (分配运算符)。而且我不认为你的例子中需要使用else阻止,因为你不会改变值

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

以上代码将为您完成工作