Используйте пакет временных рядов . В пакете xts есть функции, специально предназначенные для этого. Или посмотрите на функции агрегата и rollapply в пакете zoo.
В книге rmetrics есть полезное обсуждение, в том числе сравнение производительности различных пакетов: https://www.rmetrics.org/files/freepdf/TimeSeriesFAQ.pdf
Изменить : Посмотрите на мой ответ на этот вопрос . В основном вам нужно усечь каждую временную метку в определенный интервал, а затем выполнить агрегацию с использованием этих новых усеченных временных меток в качестве вашего вектора группировки.
Я не уверен, что вы поняли, что и ваши входные данные, и XSLT недействительны, всегда лучше предоставлять рабочие примеры.
В любом случае, если мы посмотрим на выражение XPath n:BasicDescription/n:RelatedMaterial/t:ContentProperties/t:ContentAttributes/t:Width
, вы используете префикс n
, который отображается на urn:t:myfoo:2010
, но когда данные фактически находятся в пространстве имен по умолчанию. То же самое касается префикса t
, который вообще не определен ни в исходных данных, ни в XSLT.
Вам нужно определить пространства имен "с обеих сторон", в XML-данных и в XSLT-преобразовании, и они должны быть одинаковыми, не префиксы, а URI.
Возможно, кто-то другой сможет объяснить это лучше меня.
Я исправил ваш пример и добавил несколько вещей, чтобы это работало.
Вход:
<?xml version="1.0" encoding="UTF-8"?>
<Description
xmlns="urn:t:myfoo:2010"
xmlns:t="something...">
<Information>
<GroupInformation xml:lang="en">
<BasicDescription>
<RelatedMaterial>
<SomeText>Hello</SomeText>
<t:ContentProperties>
<t:ContentAttributes>
<t:Width>555</t:Width>
<t:Height>444</t:Height>
</t:ContentAttributes>
</t:ContentProperties>
</RelatedMaterial>
</BasicDescription>
</GroupInformation>
</Information>
</Description>
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:n="urn:t:myfoo:2010"
xmlns:t="something...">
<xsl:template match="/">
<xsl:apply-templates select="n:Description/n:Information/n:GroupInformation"/>
</xsl:template>
<xsl:template match="n:GroupInformation">
<xsl:element name="width">
<xsl:value-of select="n:BasicDescription/n:RelatedMaterial/t:ContentProperties/t:ContentAttributes/t:Width"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
Выход:
<?xml version="1.0" encoding="UTF-8"?>
<width>555</width>