正在解析 XML 文件以在 R 中进行聚类
Parsing XML file for clustering in R
我正在尝试解析此 XML 文件以将其用于 R 中的聚类:
<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,结果我想要一个只有第一个项目“02: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"
我正在尝试解析此 XML 文件以将其用于 R 中的聚类:
<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,结果我想要一个只有第一个项目“02: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"