Это связано с тем, как PHP выполняет операцию сравнения, которую выполняет оператор сравнения ==
:
Если вы сравниваете число со строкой или сравнением включает числовые строки, затем каждая строка преобразуется в число, а сравнение выполняется численно. [...] Преобразование типа не происходит, когда сравнение
blockquote>===
или!==
, поскольку это включает в себя сравнение типа и значения.Поскольку первый операнд является number (
0
), а вторая строка ('e'
), строка также преобразуется в число (см. также таблицу Сравнение с различными типами ). На странице руководства по типу строковых данных определено, как выполняется последовательность для преобразования чисел :Когда строка оценивается в числовом контексте, результирующее значение и тип
Если строка не содержит никаких символов «
blockquote>.
», «e
» или «E
», а числовое значение соответствует ограничениям целочисленного типа ( как определеноPHP_INT_MAX
), строка будет оцениваться как целое число. Во всех других случаях он будет оцениваться как float.В этом случае строка будет
'e'
и, следовательно, она будет оценена как float:Значение задается начальной частью строки. Если строка начинается с действительных числовых данных, это будет используемое значение. В противном случае значение будет
blockquote>0
(ноль). Действительные числовые данные являются необязательным знаком, за которым следуют одна или несколько цифр (необязательно содержащие десятичную точку), за которыми следует необязательный показатель. Показатель - это «e
» или «E
», за которым следует одна или несколько цифр.Поскольку
'e'
не начинается с действительных числовых данных, он вычисляет значение float0
.
Я не могу проверить наверняка без воспроизводимого примера, но я думаю, что это следует сделать:
library(tidyverse)
data %>%
select(date, ID, IndID, Station_id, weigh) %>%
left_join(Stt_nm, by="Station") %>%
filter(date <= startdate & date >= enddate) %>%
group_by(date, name) %>%
summarize(rch = sum(weigh))