这是我第一次在R中使用if-else语句。我有一个名为'Performance'的列(在数据框中)有百分比(其中一些是估计值)。我创建了一个名为“Estimate”的新列,它使用“Performance”列的最后一个字符。现在,我想创建一个具有以下条件的列:如果'Estimate'='*'则'Estimate'='YES',否则'Estimate'='NO'。我只想保留新列名“Estimate”。我写的声明有效,但我收到的错误信息是:
“警告信息:在if(data.set $ Estimate ==”*“){:条件长度> 1且仅使用第一个元素”
以下是我的发言:
data.set$Estimate <- if (data.set$Estimate == '*') {data.set$Estimate = 'YES'} else{data.set$Estimate = 'NO'}
有人可以解释为什么我收到此错误消息,和/或我需要更改以获取此消息吗?非常感谢任何帮助。
答案 0 :(得分:0)
在您的专栏估算中,有多个条目包含&#34; *&#34;。但if语句只使用一个逻辑元素:
any(data.set$Estimate=="*")
并且看到你想用'&#34; YES&#34;取代*你可以用
my.fun1<-function(x)
{
ifelse(x=="*","YES","NO")
}
data.set$Estimate<-sapply(data.set$Estimate,my.fun1)
答案 1 :(得分:0)
对于警告,它实际上并不起作用。单个if语句期望单个布尔值,但是您尝试将数据$ Estimate(向量)与&#34; *&#34;进行比较。 (单个元素)。因此它完全按照它在警告中所说的那样,仅采用数据$ Estimate的第一个元素。你的思维过程很好,只是没有完全实现!
ifelse()允许矢量化(即布尔值的矢量),所以它做了你认为if-else应该做的事情。在这种情况下不需要sapply,我们可以进行矢量化。
使用您的数据$ Estimate
替换下面的vectvect<-c("*", "X", "*", "*", "10YEAH", "WHAT", "BlurbBlurb")
vect<-ifelse(vect=="*","Yes", "No" )
vect
#[1] "Yes" "No" "Yes" "Yes" "No" "No" "No"