2016-04-20 112 views
0

我试图解析这个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 

我该怎么办?

回答

0

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"