将 Haversine 结果作为双精度类型添加到数据集
Posted
技术标签:
【中文标题】将 Haversine 结果作为双精度类型添加到数据集【英文标题】:Adding Haversine results to dataset as a double type 【发布时间】:2021-06-27 13:07:14 【问题描述】:我想在包含每次骑行距离的数据集中添加一个新列。为了计算这样的距离,我使用 hasrsine 公式使用每次旅行的起点和终点的给定坐标。
我在计算距离方面取得了成功,但在以我可以阅读的方式将该列添加到数据中时遇到了困难。
在不添加列的情况下,我得到一个 double 类型的临时列 (ride_distance)(如我所愿),显示如下所示的值:
filtered_dataset %>% rowwise() %>%
mutate(ride_distance=distHaversine(c(start_lon, start_lat), c(end_lon, end_lat)))
尝试将该列添加到我添加的数据时得到的结果:
filtered_dataset$ride_distance <- filtered_dataset %>%
rowwise() %>%
mutate(distHaversine(c(start_lon, start_lat), c(end_lon, end_lat)))
使用 head() 读取该列的值我得到了这个,它们甚至没有显示为相同的值......:
如何将距离值作为双精度值添加到数据中,以便继续使用它进行计算?
【问题讨论】:
你能分享一段dput(head(data))
的数据集吗?
你已经有了答案。您需要将值分配回数据集而不是一列。 filtered_dataset <- filtered_dataset %>% rowwise() %>% mutate(ride_distance=distHaversine(c(start_lon, start_lat), c(end_lon, end_lat)))
。 filtered_dataset <-
是你所缺少的。
@RonakShah,作为答案发布? (“我未能将结果分配回原始变量名”是否存在规范重复?)
我不知道。感谢您的回答:)
【参考方案1】:
您将数据框(小标题)与小标题列混淆了。
这段代码:
filtered_dataset %>%
rowwise() %>%
mutate(ride_distance = distHaversine(c(start_lon, start_lat), c(end_lon, end_lat)))
产生你想要的输出;如果你将它重新分配给filtered_dataset
(即filtered_dataset <- filtered_dataset %>% ...
),你会得到你想要的。您还可以使用 magrittr 包中的 %<>%
运算符,它同时分配和管道:filtered_dataset %<>% rowwise() %>% ...
或者
filtered_dataset$ride_distance <- filtered_dataset %>%
rowwise() %>%
mutate(x = distHaversine(c(start_lon, start_lat), c(end_lon, end_lat))) %>%
pull(x)
会起作用的。
【讨论】:
以上是关于将 Haversine 结果作为双精度类型添加到数据集的主要内容,如果未能解决你的问题,请参考以下文章
“查询结构与函数结果类型不匹配。返回类型双精度与第 1 列中的预期类型整数不匹配。”?