我已经读到==
在浮点运算上有麻烦。例如:
74.2+53.2
[1] 127.4
74.2+53.2==127.4
[1] TRUE
74.2+153.2
[1] 227.4
74.2+153.2==227.4
[1] FALSE
isTRUE(all.equal(74.2+153.2, 227.4))
[1] TRUE
使用dplyr
到group_by
变量,然后将summarise
的一个变量设为sum
,将另一个变量的max
用作变量,然后查找等效项。
library(dplyr)
df<-tibble(group=c( 1, 2, 2, 3),
B= c(1.0, 74.2, 53.2, 1.0),
C= c( 2, 127.4, 127.4, 1.0))
df %>%
group_by(group) %>%
summarise(sumB = sum(B),
maxC = max(C)) %>%
mutate(equal = case_when(sumB== maxC ~ "yes"))
group sumB maxC equal <dbl> <dbl> <dbl> <chr> 1 1 1 2 NA 2 2 127. 127. yes 3 3 1 1 yes
df<-tibble(group=c(1,2,2,3),
B=c(1.0,74.2,153.2,1.0),
C=c(2,227.4,227.4,1.0))
df %>%
group_by(group) %>%
summarise(sumB = sum(B),
maxC = max(C)) %>%
mutate(equal = case_when(sumB== maxC ~ "yes"))
# A tibble: 3 x 4 group sumB maxC equal <dbl> <dbl> <dbl> <chr> 1 1 1 2 NA 2 2 227. 227. NA 3 3 1 1 yes
直接数学
74.2+153.2==227.4
[1] FALSE
现在用isTRUE()
和all.equal()
包裹
isTRUE(all.equal(74.2+153.2, 227.4))
[1]是
case_when()
df %>%
group_by(group) %>%
summarise(sumB = sum(B),
maxC = max(C)) %>%
mutate(equal = case_when(isTRUE(all.equal(sumB, maxC)) ~ "yes"))
# A tibble: 3 x 4 group sumB maxC equal <dbl> <dbl> <dbl> <chr> 1 1 1 2 NA 2 2 227. 227. NA 3 3 1 1 NA
否,这不是预期的结果。解决这个问题的正确方法是什么?