我是R的完全初学者,无法找到我问题的具体答案,对不起,如果已经发布了这样的问题。
我正在寻找一种方法来转换直接从R上的XML查询获得的XML结果,并将其识别为“字符”类型的数据。
以下是我获得的那种结果的摘录:
XML结果:
<?xml version="1.0" standalone="yes"?>
<soft date="09/07/2018 12:11">
<name>
<batch id="1">
<p valeur="7"/>
<lot id="754" esp="16" surf="15">
<val1 valeur="710"/>
<val2 valeur="260"/>
<pval valeur="300"/>
<res n="20">
<year valeur="1998">
<y valeur="22.38"/>
<vol valeur="0"/>
</year>
<year valeur="1999">
<y valeur="27.78"/>
<vol valeur="0"/>
</year>
<year valeur="2000">
<y valeur="29.75"/>
<vol valeur="0"/>
</year>
<year valeur="2001">
<y valeur="25.03"/>
<vol valeur="0"/>
</year>
<year valeur="2002">
<y valeur="30.07"/>
<vol valeur="0"/>
</year>
<year valeur="2003">
<y valeur="23.57"/>
<vol valeur="0"/>
</year>
<year valeur="2004">
<y valeur="19.47"/>
<vol valeur="0"/>
</year>
<year valeur="2005">
<y valeur="18.63"/>
<vol valeur="0"/>
</year>
<year valeur="2006">
<y valeur="26.73"/>
<vol valeur="0"/>
</year>
<year valeur="2007">
<y valeur="31.64"/>
<vol valeur="0"/>
</year>
<year valeur="2008">
<y valeur="27.11"/>
<vol valeur="0"/>
</year>
<year valeur="2009">
<y valeur="20.14"/>
<vol valeur="0"/>
</year>
<year valeur="2010">
<y valeur="27.87"/>
<vol valeur="0"/>
</year>
<year valeur="2011">
<y valeur="27.92"/>
<vol valeur="0"/>
</year>
<year valeur="2012">
<y valeur="23.05"/>
<vol valeur="0"/>
</year>
<year valeur="2013">
<y valeur="24.96"/>
<vol valeur="0"/>
</year>
<year valeur="2014">
<y valeur="29.86"/>
<vol valeur="0"/>
</year>
<year valeur="2015">
<y valeur="16.93"/>
<vol valeur="0"/>
</year>
<year valeur="2016">
<y valeur="24.52"/>
<vol valeur="0"/>
</year>
<year valeur="2017">
<y valeur="25.55"/>
<vol valeur="0"/>
</year>
</res>
</lot>
<lot id="755" esp="17" surf="15">
<val1 valeur="600"/>
<val2 valeur="530"/>
<pval valeur="150"/>
<res n="20">
<year valeur="1998">
<y valeur="87.77"/>
<vol valeur="0"/>
</year>
<year valeur="1999">
<y valeur="109.08"/>
<vol valeur="0"/>
</year>
<year valeur="2000">
<y valeur="109.23"/>
<vol valeur="0"/>
</year>
<year valeur="2001">
<y valeur="94.07"/>
<vol valeur="0"/>
</year>
<year valeur="2002">
<y valeur="97.64"/>
<vol valeur="0"/>
</year>
<year valeur="2003">
<y valeur="73.26"/>
<vol valeur="0"/>
</year>
<year valeur="2004">
<y valeur="86.13"/>
<vol valeur="0"/>
</year>
<year valeur="2005">
<y valeur="80.59"/>
<vol valeur="0"/>
</year>
<year valeur="2006">
<y valeur="66.57"/>
<vol valeur="0"/>
</year>
<year valeur="2007">
<y valeur="103.99"/>
<vol valeur="0"/>
</year>
<year valeur="2008">
<y valeur="109.23"/>
<vol valeur="0"/>
</year>
<year valeur="2009">
<y valeur="96.62"/>
<vol valeur="0"/>
</year>
<year valeur="2010">
<y valeur="85.96"/>
<vol valeur="0"/>
</year>
<year valeur="2011">
<y valeur="49.51"/>
<vol valeur="0"/>
</year>
<year valeur="2012">
<y valeur="107.55"/>
<vol valeur="0"/>
</year>
<year valeur="2013">
<y valeur="109.23"/>
<vol valeur="0"/>
</year>
<year valeur="2014">
<y valeur="91.19"/>
<vol valeur="0"/>
</year>
<year valeur="2015">
<y valeur="65.59"/>
<vol valeur="0"/>
</year>
<year valeur="2016">
<y valeur="109.12"/>
<vol valeur="0"/>
</year>
<year valeur="2017">
<y valeur="83.36"/>
<vol valeur="0"/>
</year>
</res>
</lot>
<lot id="756" esp="47" surf="20">
<val1 valeur="600"/>
<val2 valeur="600"/>
<pval valeur="180"/>
<res n="20">
<year valeur="1998">
<y valeur="71.04"/>
<vol valeur="16200"/>
</year>
<year valeur="1999">
<y valeur="89.07"/>
<vol valeur="12000"/>
</year>
<year valeur="2000">
<y valeur="83.88"/>
<vol valeur="16200"/>
</year>
<year valeur="2001">
<y valeur="75.76"/>
<vol valeur="13200"/>
</year>
<year valeur="2002">
<y valeur="87.29"/>
<vol valeur="14400"/>
</year>
<year valeur="2003">
<y valeur="63.4"/>
<vol valeur="14400"/>
</year>
<year valeur="2004">
<y valeur="63.77"/>
<vol valeur="12000"/>
</year>
<year valeur="2005">
<y valeur="52.18"/>
<vol valeur="16800"/>
</year>
<year valeur="2006">
<y valeur="78.48"/>
<vol valeur="9600"/>
</year>
<year valeur="2007">
<y valeur="88.58"/>
<vol valeur="13800"/>
</year>
<year valeur="2008">
<y valeur="83.42"/>
<vol valeur="16800"/>
</year>
<year valeur="2009">
<y valeur="63.8"/>
<vol valeur="16800"/>
</year>
<year valeur="2010">
<y valeur="76.76"/>
<vol valeur="16800"/>
</year>
<year valeur="2011">
<y valeur="84.86"/>
<vol valeur="13800"/>
</year>
<year valeur="2012">
<y valeur="64.59"/>
<vol valeur="16800"/>
</year>
<year valeur="2013">
<y valeur="67.49"/>
<vol valeur="16200"/>
</year>
<year valeur="2014">
<y valeur="88.59"/>
<vol valeur="12000"/>
</year>
<year valeur="2015">
<y valeur="51.52"/>
<vol valeur="12000"/>
</year>
<year valeur="2016">
<y valeur="65.2"/>
<vol valeur="16800"/>
</year>
<year valeur="2017">
<y valeur="74.5"/>
<vol valeur="14400"/>
</year>
</res>
</lot>
</batch>
</name>
我正在寻找一种将文件转换为数据框的简单方法,在该数据框上可以运行一些基本统计信息,例如箱线图,均值,总和等。
我没有将这些结果存储在任何类型的文件中,因为我想直接在R上运行整个过程(查询+结果+基本统计信息)。
您能帮我这个要求吗?
非常感谢
卡罗琳
答案 0 :(得分:0)
我不知道您到底想要什么。下面的代码为数据帧中的每个批次提供year
,y
和vol
。您还需要其他东西吗?
library(xml2)
xml_as_list <- as_list(read_xml("xml02.xml"))
f <- function(LL){
inner <- function(i){
data.frame(year = attr(LL[[i]], "valeur"),
y = attr(LL[[i]][["y"]], "valeur"),
vol = attr(LL[[i]][["vol"]], "valeur"))
}
do.call(rbind, lapply(1:attributes(LL)[["n"]], inner))
}
dat <- do.call(rbind,
lapply(xml_as_list$name$batch[2:4],
function(L) cbind(id = attributes(L)[["id"]], f(L[["res"]])))
)
rownames(dat) <- NULL
这给出了:
> dat
id year y vol
1 754 1998 22.38 0
2 754 1999 27.78 0
3 754 2000 29.75 0
4 754 2001 25.03 0
5 754 2002 30.07 0
6 754 2003 23.57 0
7 754 2004 19.47 0
8 754 2005 18.63 0
9 754 2006 26.73 0
10 754 2007 31.64 0
11 754 2008 27.11 0
12 754 2009 20.14 0
13 754 2010 27.87 0
14 754 2011 27.92 0
15 754 2012 23.05 0
16 754 2013 24.96 0
17 754 2014 29.86 0
18 754 2015 16.93 0
19 754 2016 24.52 0
20 754 2017 25.55 0
21 755 1998 87.77 0
22 755 1999 109.08 0
23 755 2000 109.23 0
24 755 2001 94.07 0
25 755 2002 97.64 0
26 755 2003 73.26 0
27 755 2004 86.13 0
28 755 2005 80.59 0
29 755 2006 66.57 0
30 755 2007 103.99 0
31 755 2008 109.23 0
32 755 2009 96.62 0
33 755 2010 85.96 0
34 755 2011 49.51 0
35 755 2012 107.55 0
36 755 2013 109.23 0
37 755 2014 91.19 0
38 755 2015 65.59 0
39 755 2016 109.12 0
40 755 2017 83.36 0
41 756 1998 71.04 16200
42 756 1999 89.07 12000
43 756 2000 83.88 16200
44 756 2001 75.76 13200
45 756 2002 87.29 14400
46 756 2003 63.4 14400
47 756 2004 63.77 12000
48 756 2005 52.18 16800
49 756 2006 78.48 9600
50 756 2007 88.58 13800
51 756 2008 83.42 16800
52 756 2009 63.8 16800
53 756 2010 76.76 16800
54 756 2011 84.86 13800
55 756 2012 64.59 16800
56 756 2013 67.49 16200
57 756 2014 88.59 12000
58 756 2015 51.52 12000
59 756 2016 65.2 16800
60 756 2017 74.5 14400