使用XML库导入gpx轨迹

使用XML库导入gpx轨迹,xml,r,gpx,Xml,R,Gpx,我想分析R中的gpx轨迹。要导入数据,我尝试使用 我发现这解释了如何导入每个单独的数据向量,然后将它们组合到一个数据帧中 但是,在我的用例中,这不起作用,因为对于某些节点,没有收集到心率,因此向量的长度不匹配 因此,我尝试一次导入所有相关数据 到目前为止,我所做的是 library(XML) filename <- "sample.gpx" download.file("https://owncloud.yeara.net/index.php/s/Io4uOq6sfFuCCdq/down

我想分析R中的gpx轨迹。要导入数据,我尝试使用

我发现这解释了如何导入每个单独的数据向量,然后将它们组合到一个数据帧中

但是,在我的用例中,这不起作用,因为对于某些节点,没有收集到心率,因此向量的长度不匹配

因此,我尝试一次导入所有相关数据

到目前为止,我所做的是

library(XML)

filename <- "sample.gpx"
download.file("https://owncloud.yeara.net/index.php/s/Io4uOq6sfFuCCdq/download", filename) # downloads a sample file from my server

gpx.raw <- xmlTreeParse(filename, useInternalNodes = TRUE)

rootNode <- xmlRoot(gpx.raw)

print(rootNode) # output seems okay
库(XML)

filename这是我最后得到的代码。感谢大家(特别是@lukeA)的帮助

library(XML)
library(plyr)

filename <- "Downloads/activity(1).gpx"

gpx.raw <- xmlTreeParse(filename, useInternalNodes = TRUE)

rootNode <- xmlRoot(gpx.raw)

gpx.rawlist <- xmlToList(rootNode)$trk

gpx.list <- unlist(gpx.rawlist[names(gpx.rawlist) == "trkseg"], recursive = FALSE)

gpx <- do.call(rbind.fill, lapply(gpx.list, function(x) as.data.frame(t(unlist(x)), stringsAsFactors=F)))
names(gpx) <- c("ele", "time", "hr", "lon", "lat")
库(XML)
图书馆(plyr)

filename这是我最后得到的代码。感谢大家(特别是@lukeA)的帮助

library(XML)
library(plyr)

filename <- "Downloads/activity(1).gpx"

gpx.raw <- xmlTreeParse(filename, useInternalNodes = TRUE)

rootNode <- xmlRoot(gpx.raw)

gpx.rawlist <- xmlToList(rootNode)$trk

gpx.list <- unlist(gpx.rawlist[names(gpx.rawlist) == "trkseg"], recursive = FALSE)

gpx <- do.call(rbind.fill, lapply(gpx.list, function(x) as.data.frame(t(unlist(x)), stringsAsFactors=F)))
names(gpx) <- c("ele", "time", "hr", "lon", "lat")
库(XML)
图书馆(plyr)

filename这里的版本与@speendo的答案类似,但使用了dplyr和purrr:

library(XML)
library(dplyr)
library(purrr)

filename <- "Downloads/activity(1).gpx"

gpx <- filename %>%
  xmlTreeParse(useInternalNodes = TRUE) %>%
  xmlRoot %>%
  xmlToList %>%
  (function(x) x$trk) %>%
  (function(x) unlist(x[names(x) == "trkseg"], recursive = FALSE)) %>%
  map_df(function(x) as.data.frame(t(unlist(x)), stringsAsFactors=FALSE))
库(XML)
图书馆(dplyr)
图书馆(purrr)
文件名%
xmlRoot%>%
xmlToList%>%
(功能(x)x$trk)%>%
(函数(x)未列出(x[名称(x)=“trkseg”],递归=FALSE))%>%
map_df(函数(x)作为.data.frame(t(未列出(x)),stringsAsFactors=FALSE))

这里的版本与@speendo的答案类似,但使用了dplyr和purr:

library(XML)
library(dplyr)
library(purrr)

filename <- "Downloads/activity(1).gpx"

gpx <- filename %>%
  xmlTreeParse(useInternalNodes = TRUE) %>%
  xmlRoot %>%
  xmlToList %>%
  (function(x) x$trk) %>%
  (function(x) unlist(x[names(x) == "trkseg"], recursive = FALSE)) %>%
  map_df(function(x) as.data.frame(t(unlist(x)), stringsAsFactors=FALSE))
库(XML)
图书馆(dplyr)
图书馆(purrr)
文件名%
xmlRoot%>%
xmlToList%>%
(功能(x)x$trk)%>%
(函数(x)未列出(x[名称(x)=“trkseg”],递归=FALSE))%>%
map_df(函数(x)作为.data.frame(t(未列出(x)),stringsAsFactors=FALSE))

您能否显示到目前为止执行此处理的代码?你能创建一个处理适当节点的函数吗?当“hr”子节点不存在时,它将提供一个默认值?我到目前为止使用的代码在我的问题中是链接的:或者
elevations展平嵌套的xml内容(imho)总是一个难题。尝试类似于
lst的东西,或者您可以只使用
plotKML::readGPX()
但是,
plotKML:::.readGPX.element()
prbly的源代码有足够的提示让您开始,并且似乎非常独立,只需要
XML
pkg就可以显示您目前为止用于执行此处理的代码吗?你能创建一个处理适当节点的函数吗?当“hr”子节点不存在时,它将提供一个默认值?我到目前为止使用的代码在我的问题中是链接的:或者
elevations展平嵌套的xml内容(imho)总是一个难题。试试像
lst这样的东西,或者你可以直接使用
plotKML::readGPX()
,但是
plotKML:::.readGPX.element()
prbly的源代码有足够的提示来帮助你入门,而且似乎非常独立,只需要
XML
pkg