【问题标题】:ifelse | Mismatch如果是 |不匹配
【发布时间】:2016-08-22 18:57:18
【问题描述】:

我的目标是比较两个向量中的元素。

这是我的第一个小标题:

Post_Rev
# A tibble: 12 x 2
   Fiscal.Quarter.ID        Rev
       <S3: yearqtr>      <dbl>
1            2014 Q1 3889692022
2            2014 Q2 3763028239
3            2014 Q3 4092263526
4            2014 Q4 4865950809
5            2015 Q1 4015879019
6            2015 Q2 4112382310
7            2015 Q3 4247783642
8            2015 Q4 5040074056
9            2016 Q1 4100946981
10           2016 Q2 4021051564
11           2016 Q3 4373665674
12           2016 Q4 5064779447

这是我的第二个向量:

Total_Rev
 [1] 3889692022 3763028239 4092263526 4865950809 4015879019 4112382310 4247783642 5040074056
 [9] 4100946981 4021051564 4373665674 5064779447

我们可以看到,两个向量,即 Post_Rev 和 Total_Rev 中的 Rev 是相等的。 我还会告诉你类类型。

class(Post_Rev$Rev)
[1] "numeric"

class(Total_Rev)
[1] "numeric"

但是,当我运行 ifelse 时,它​​会为某些行抛出“不等行”:

ifelse(Post_Rev$Rev != Total_Rev,TRUE,FALSE)
 [1] FALSE  **TRUE** FALSE FALSE FALSE FALSE FALSE FALSE  **TRUE  TRUE** FALSE FALSE

可能是什么原因?无论如何我可以找出原因吗?非常感谢您的想法。

我尝试了 Wickham 的 if_else 函数:

if_else(Post_Rev$Rev != Total_Rev,TRUE,FALSE)
 [1] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE

我得到了同样的结果。我不确定为什么会这样。


添加 dput():

dput(Post_Rev)
structure(list(Fiscal.Quarter.ID = structure(c(2014, 2014.25, 
2014.5, 2014.75, 2015, 2015.25, 2015.5, 2015.75, 2016, 2016.25, 
2016.5, 2016.75), class = "yearqtr"), Rev = c(3889692022.46776, 
3763028239.33219, 4092263526.07502, 4865950809.37372, 4015879019.37871, 
4112382310.2044, 4247783641.70853, 5040074055.98503, 4100946980.66123, 
4021051564.10049, 4373665674.01029, 5064779446.86354)), .Names = c("Fiscal.Quarter.ID", 
"Rev"), row.names = c(NA, -12L), class = c("tbl_df", "tbl", "data.frame"
))

dput(Total_Rev)
c(3889692022.46776, 3763028239.33219, 4092263526.07502, 4865950809.37372, 
4015879019.37871, 4112382310.2044, 4247783641.70853, 5040074055.98503, 
4100946980.66123, 4021051564.10049, 4373665674.01029, 5064779446.86354

【问题讨论】:

  • "我们可以看到,两个向量,即 Post_Rev 中的 Rev 和 Total_Rev 是相等的。将数字与计算机进行比较的第一条规则是不要将您看到的打印在屏幕上实际值 混淆。仔细检查ifelse 所说的不等于all.equal()
  • (另外,ifelse 是多余的,因为 ==!= 已经矢量化了)
  • 除非您将dput() 的输出同时添加到Post_RevTotal_Rev 到您的问题中,否则我无法做更多。
  • 这是一个常见问题解答,杰克。数值未按其完整级别的精度显示。
  • hep.by/gnu/r-patched/r-faq/R-FAQ_82.html(R 常见问题解答 7.31)

标签: r if-statement dplyr


【解决方案1】:

我想回答这个问题。 r2evans 和 42 出现在:

当我们减去数字时,我们会看到数字有所不同。

Post_Rev$Rev-Total_Rev
 [1]  0.000000e+00 -4.768372e-07  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
 [7]  0.000000e+00  0.000000e+00 -4.768372e-07 -4.768372e-07  0.000000e+00  0.000000e+00

【讨论】:

    猜你喜欢
    • 2011-09-09
    • 2022-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多