我想学习如何使用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数据框中的值?
答案 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
}
以上代码将为您完成工作