解析XML文件
问题描述:
我试图解析这个XML文件中的R使用它的集群:解析XML文件
<root>
<event>
<name>apache</name>
<ip_source>188.185.15.192</ip_source>
<date>02:17:45</date>
<request>GET3</request>
<status>200</status>
<len>7965</len>
</event>
<event>
<name>apache</name>
<ip_source>157.90.39.64</ip_source>
<date>02:30:01</date>
<request>GET2</request>
<status>200</status>
<len>964</len>
</event>
<event>
<name>apache</name>
<ip_source>115.78.92.20</ip_source>
<date>02:34:03</date>
<request>GET1</request>
<status>404</status>
<len>295</len>
</event>
</root>
所以我用下面的代码在R:
library("XML")
df <- xmlToDataFrame("file.xml" ,stringsAsFactors = FALSE)
distance <- adist(df)
hc <- hclust(as.dist(distance))
groups<-cutree(hc, k=2)
result= df$date[groups==1]
result
而且结果我得到的是:
[1] "02:17:45" "02:34:03" NA NA NA
问题是,我不明白为什么会出现NA,我想有一个结果列表,只有第一项“0 2:17:45“和第二个”02:34:03“,如下所示:
[1] 02:17:45 02:34:03
我该怎么办?
答
df
具有3行和组的长度为6。当我们做groups==1
观测1和组3的真因此匹配日期对象 返回但是,观察4,5和6中不存在的df
因此NA
df
# name ip_source date request status len
#1 apache 188.185.15.192 02:17:45 GET3 200 7965
#2 apache 157.90.39.64 02:30:01 GET2 200 964
#3 apache 115.78.92.20 02:34:03 GET1 404 295
groups
# name ip_source date request status len
# 1 2 1 1 1 1
groups==1
#name ip_source date request status len
#TRUE FALSE TRUE TRUE TRUE TRUE
df[groups==1,]
# name ip_source date request status len
#1 apache 188.185.15.192 02:17:45 GET3 200 7965
#3 apache 115.78.92.20 02:34:03 GET1 404 295
#NA <NA> <NA> <NA> <NA> <NA> <NA>
#NA.1 <NA> <NA> <NA> <NA> <NA> <NA>
#NA.2 <NA> <NA> <NA> <NA> <NA> <NA>
当我们限制组向量的长度为df
你会得到预期的结果。这对你来说可以吗
df[groups[1:nrow(df)]==1,"date"]
#[1] "02:17:45" "02:34:03"