dplyr if_else Error:'true'必须是长度x(条件的长度)或1,而不是r中的0

dplyr if_else Error:'true'必须是长度x(条件的长度)或1,而不是r中的0,r,if-statement,dplyr,R,If Statement,Dplyr,我有一个看起来像这样的数据框: df <- data.frame('Home.Team'=c("Omaha South", "Millard North", "Elkhorn","Elkhorn"), 'Winner'=c("Omaha South", "Millard North", "Elkhorn","Elkhorn"), 'Won By'=c(8,22,4,30),

我有一个看起来像这样的数据框:

df <- data.frame('Home.Team'=c("Omaha South", "Millard North", "Elkhorn","Elkhorn"),                      
                 'Winner'=c("Omaha South", "Millard North", "Elkhorn","Elkhorn"),
                 'Won By'=c(8,22,4,30),
                 'Away Class'=c("TRUE", "FALSE", "TRUE", "FALSE"))
错误:
true
必须是长度4(条件的长度)或1,而不是0


我已经阅读了与此相关的多个SO讨论(,),但未能将其转化为我问题的解决方案。它似乎与代码的“if-true”部分有关。显然,它认为这是一个1的长度,而我希望它是一个4的长度,或者适用于所有行。当尝试用case_替换if_else时,也没有成功。

这本应该是一条评论,但结果太令人困惑了:

变量名中缺少句点-data.frame会在使用带有空格的变量名创建df时自动添加句点:

if_else(df$`Away.Class`=="FALSE", #Away.Class instead of `Away Class`
             if_else(df$Home.Team==df$Winner, .8 + (df$`Won.By`/100) -1, -1.2 - (df$`Won.By`/100) -1), # Won.By instead of `Won By`
             if_else(df$Home.Team==df$Winner, .8 + (df$`Won.By`/100), -1.2 - (df$`Won.By`/100))) # ditto
[1] 0.88 0.02 0.84 0.10

下面是代码导致错误的原因:当您运行
.8+(df$
/100赢得)-1
,结果为
NULL
,因为该列不存在-因此列表真/假结果的长度为零
ifelse
需要此列表的长度与您的条件相同(即四个,在这种情况下,每个真实情况将获得适当的数据),或1个(在这种情况下,所有真实结果将获得相同的输出)。

这本应该是一个注释,但结果太混乱了:

变量名中缺少句点-data.frame会在使用带有空格的变量名创建df时自动添加句点:

if_else(df$`Away.Class`=="FALSE", #Away.Class instead of `Away Class`
             if_else(df$Home.Team==df$Winner, .8 + (df$`Won.By`/100) -1, -1.2 - (df$`Won.By`/100) -1), # Won.By instead of `Won By`
             if_else(df$Home.Team==df$Winner, .8 + (df$`Won.By`/100), -1.2 - (df$`Won.By`/100))) # ditto
[1] 0.88 0.02 0.84 0.10

下面是代码导致错误的原因:当您运行
.8+(df$
/100赢得)-1
,结果为
NULL
,因为该列不存在-因此列表真/假结果的长度为零
ifelse
需要此列表的长度与您的条件相同(即四个,在这种情况下,每个真实情况将获得相应的数据),或1个(在这种情况下,所有真实结果将获得相同的输出)。

谢谢@iod。这会解决上面的问题吗?或者这是一个额外的错误吗?正如我在我的示例中所显示的那样-如果我用缺少的句点运行代码,我会得到预期的答案(
[1]0.88 0.02 0.84 0.10
),谢谢@iod。这会解决上面的问题吗?或者这是一个额外的错误吗?正如我在我的示例中所显示的那样,如果我用缺少的句点运行代码,我会得到预期的答案(
[1]0.88 0.02 0.84 0.10
),而不是直接相关的,但是为什么将true和false作为字符,而不是布尔值?对于调试ifelse语句,尤其是像这样嵌套的语句,最好逐个地将它们分开,看看哪些语句运行或不运行。另外,当不直接相关时,您是如何尝试使用case_的?但为什么将true和false作为字符而不是布尔值?对于调试ifelse语句,尤其是像这样嵌套的语句,最好逐个地将它们分开,看看哪些语句运行或不运行。另外,当时,您是如何尝试案例的?