R 打印与级别关联的值
我有一段代码:R 打印与级别关联的值,r,R,我有一段代码: data <- read.csv("small.csv",header=TRUE, sep=",") data$normal = as.character(data$normal) data$normal[data$normal == "ipsweep"] = "3" data$normal[data$normal == "portsweep"] = "3" data$normal[data$normal == "nmap"] = "3" data$normal[data$
data <- read.csv("small.csv",header=TRUE, sep=",")
data$normal = as.character(data$normal)
data$normal[data$normal == "ipsweep"] = "3"
data$normal[data$normal == "portsweep"] = "3"
data$normal[data$normal == "nmap"] = "3"
data$normal[data$normal == "satan"] = "3"
data$normal[data$normal == "buffer_overflow"] = "5"
data$normal[data$normal == "loadmodule"] = "5"
data$normal[data$normal == "perl"] = "5"
data$normal[data$normal == "rootkit"] = "5"
data$normal[data$normal == "back"] = "1"
data$normal[data$normal == "land"] = "1"
data$normal[data$normal == "neptune"] = "1"
data$normal[data$normal == "pod"] = "1"
data$normal[data$normal == "smurf"] = "1"
data$normal[data$normal == "teardrop"] = "1"
data$normal[data$normal == "ftp_write"] = "4"
data$normal[data$normal == "guess_passwd"] = "4"
data$normal[data$normal == "imap"] = "4"
data$normal[data$normal == "multihop"] = "4"
data$normal[data$normal == "phf"] = "4"
data$normal[data$normal == "spy"] = "4"
data$normal[data$normal == "warezclient"] = "4"
data$normal[data$normal == "warezmaster"] = "4"
data$normal[data$normal == "normal"] = "2"
data = data[!(data$normal=="0.00"),]
data = data[!(data$normal==""),]
data$normal = factor(data$normal)
When I run: `data$normal`, it gives the following output
[1] 2 1 2 2 1 1 1 1 1 1 1 2 4 1 1 2 3 2 2 1 1 2 2 1 2 1 2 2 2 3 1 2 3 2 2 2 1 2 1 1 1 2 2 2 1 1 2 4 1 2 1 1 2 2 2 3 1 1
如何打印行值为
neptune
但不是1
的每一列?我不完全确定您想做什么,但如果您以后想使用字符数据,就不能用(字符串)数字覆盖它。这似乎是一个更好的解决方案:
keys_values <- c("ipsweep" = 3, "portsweep" = 3, "nmap" = 3, "satan" = 3, "buffer_overflow" = 5,
"loadmodule" = 5, "perl" = 5, "rootkit" = 5, "back" = 1, "land" = 1, "neptune" = 1,
"pod" = 1, "smurf" = 1, "teardrop" = 1, "ftp_write" = 4, "guess_passwd" = 4, "imap" = 4,
"multihop" = 4, "phf" = 4, "spy" = 4, "warezclient" = 4, "warezmaster" = 4, "normal" = 2)
data$normal <- as.character(data$normal)
data$normal_value <- keys_values[data$normal]
data <- data[data$normal != "0.00" & data$normal != "", ]
data$normal <- factor(data$normal)
x <- data[data$normal == "neptune", ]
keys\u values我不完全确定您想要做什么,但是如果您以后想使用字符数据,您不能用(字符串)数字覆盖它。这似乎是一个更好的解决方案:
keys_values <- c("ipsweep" = 3, "portsweep" = 3, "nmap" = 3, "satan" = 3, "buffer_overflow" = 5,
"loadmodule" = 5, "perl" = 5, "rootkit" = 5, "back" = 1, "land" = 1, "neptune" = 1,
"pod" = 1, "smurf" = 1, "teardrop" = 1, "ftp_write" = 4, "guess_passwd" = 4, "imap" = 4,
"multihop" = 4, "phf" = 4, "spy" = 4, "warezclient" = 4, "warezmaster" = 4, "normal" = 2)
data$normal <- as.character(data$normal)
data$normal_value <- keys_values[data$normal]
data <- data[data$normal != "0.00" & data$normal != "", ]
data$normal <- factor(data$normal)
x <- data[data$normal == "neptune", ]
keys\u values如果你再仔细研究一下GitHub存储库,你会发现一些其他有用的csv文件。列出攻击类型,这些名称与小训练数据集中的名称匹配。列出在主csv文件中看不到的字段名
攻击类型csv可能正是为您所尝试的操作而设计的。它是一个查找表,将攻击“类型”与每个攻击“名称”关联起来。您可以将其与主数据集合并,如下所示
# Base url
u <- 'https://raw.githubusercontent.com/defcom17/NSL_KDD/master'
# Read in the field names table
nm <- read.csv(file.path(u, 'Field%20Names.csv'),
header=FALSE, stringsAsFactors=FALSE)
# Read in the attack types table
attacks <- read.csv(file.path(u, 'Attack%20Types.csv'),
header=FALSE, stringsAsFactors=FALSE,
col.names=c('name', 'type'))
# Read in the main dataset
d <- read.csv(file.path(u, 'Small%20Training%20Set.csv'),
header=FALSE, stringsAsFactors=FALSE)
# Assign the field names to the main dataset. This is really optional.
names(d) <- nm[, 1]
# There were a couple of names missing.
# One is obvious, while the other seems irrelevant for now.
names(d)[42:43] <- c('name', 'code')
# By default, merge() merges on fields that the datasets have in common (i.e., "name").
d2 <- merge(d, attacks)
head(d2)
## name duration protocol_type service flag src_bytes dst_bytes land
## 1 normal 0 tcp ftp_data SF 491 0 0
## 2 normal 0 udp other SF 146 0 0
## 3 normal 240 tcp http SF 328 275 0
## 4 normal 0 tcp http SF 232 8153 0
## 5 normal 0 tcp http SF 199 420 0
## 6 normal 0 udp domain_u SF 46 46 0
## wrong_fragment urgent hot num_failed_logins logged_in num_compromised
## 1 0 0 0 0 0 0
## 2 0 0 0 0 0 0
## 3 0 0 0 0 1 0
## 4 0 0 0 0 1 0
## 5 0 0 0 0 1 0
## 6 0 0 0 0 0 0
## root_shell su_attempted num_root num_file_creations num_shells num_access_files
## 1 0 0 0 0 0 0
## 2 0 0 0 0 0 0
## 3 0 0 0 0 0 0
## 4 0 0 0 0 0 0
## 5 0 0 0 0 0 0
## 6 0 0 0 0 0 0
## num_outbound_cmds is_host_login is_guest_login count srv_count serror_rate
## 1 0 0 0 2 2 0.0
## 2 0 0 0 13 1 0.0
## 3 0 0 0 9 10 0.0
## 4 0 0 0 5 5 0.2
## 5 0 0 0 30 32 0.0
## 6 0 0 0 96 178 0.0
## srv_serror_rate rerror_rate srv_rerror_rate same_srv_rate diff_srv_rate
## 1 0.0 0 0.0 1.00 0.00
## 2 0.0 0 0.0 0.08 0.15
## 3 0.0 0 0.1 1.00 0.00
## 4 0.2 0 0.0 1.00 0.00
## 5 0.0 0 0.0 1.00 0.00
## 6 0.0 0 0.0 1.00 0.00
## srv_diff_host_rate dst_host_count dst_host_srv_count dst_host_same_srv_rate
## 1 0.00 150 25 0.17
## 2 0.00 255 1 0.00
## 3 0.20 255 250 0.98
## 4 0.00 30 255 1.00
## 5 0.09 255 255 1.00
## 6 0.02 255 254 1.00
## dst_host_diff_srv_rate dst_host_same_src_port_rate dst_host_srv_diff_host_rate
## 1 0.03 0.17 0.00
## 2 0.60 0.88 0.00
## 3 0.01 0.00 0.00
## 4 0.00 0.03 0.04
## 5 0.00 0.00 0.00
## 6 0.01 0.01 0.00
## dst_host_serror_rate dst_host_srv_serror_rate dst_host_rerror_rate
## 1 0.00 0.00 0.05
## 2 0.00 0.00 0.00
## 3 0.00 0.00 0.00
## 4 0.03 0.01 0.00
## 5 0.00 0.00 0.00
## 6 0.00 0.00 0.00
## dst_host_srv_rerror_rate code type
## 1 0.00 20 normal
## 2 0.00 15 normal
## 3 0.00 21 normal
## 4 0.01 21 normal
## 5 0.00 21 normal
## 6 0.00 18 normal
如果您再仔细研究一下GitHub存储库,您会发现一些其他有用的csv文件。列出攻击类型,这些名称与小训练数据集中的名称匹配。列出在主csv文件中看不到的字段名
攻击类型csv可能正是为您所尝试的操作而设计的。它是一个查找表,将攻击“类型”与每个攻击“名称”关联起来。您可以将其与主数据集合并,如下所示
# Base url
u <- 'https://raw.githubusercontent.com/defcom17/NSL_KDD/master'
# Read in the field names table
nm <- read.csv(file.path(u, 'Field%20Names.csv'),
header=FALSE, stringsAsFactors=FALSE)
# Read in the attack types table
attacks <- read.csv(file.path(u, 'Attack%20Types.csv'),
header=FALSE, stringsAsFactors=FALSE,
col.names=c('name', 'type'))
# Read in the main dataset
d <- read.csv(file.path(u, 'Small%20Training%20Set.csv'),
header=FALSE, stringsAsFactors=FALSE)
# Assign the field names to the main dataset. This is really optional.
names(d) <- nm[, 1]
# There were a couple of names missing.
# One is obvious, while the other seems irrelevant for now.
names(d)[42:43] <- c('name', 'code')
# By default, merge() merges on fields that the datasets have in common (i.e., "name").
d2 <- merge(d, attacks)
head(d2)
## name duration protocol_type service flag src_bytes dst_bytes land
## 1 normal 0 tcp ftp_data SF 491 0 0
## 2 normal 0 udp other SF 146 0 0
## 3 normal 240 tcp http SF 328 275 0
## 4 normal 0 tcp http SF 232 8153 0
## 5 normal 0 tcp http SF 199 420 0
## 6 normal 0 udp domain_u SF 46 46 0
## wrong_fragment urgent hot num_failed_logins logged_in num_compromised
## 1 0 0 0 0 0 0
## 2 0 0 0 0 0 0
## 3 0 0 0 0 1 0
## 4 0 0 0 0 1 0
## 5 0 0 0 0 1 0
## 6 0 0 0 0 0 0
## root_shell su_attempted num_root num_file_creations num_shells num_access_files
## 1 0 0 0 0 0 0
## 2 0 0 0 0 0 0
## 3 0 0 0 0 0 0
## 4 0 0 0 0 0 0
## 5 0 0 0 0 0 0
## 6 0 0 0 0 0 0
## num_outbound_cmds is_host_login is_guest_login count srv_count serror_rate
## 1 0 0 0 2 2 0.0
## 2 0 0 0 13 1 0.0
## 3 0 0 0 9 10 0.0
## 4 0 0 0 5 5 0.2
## 5 0 0 0 30 32 0.0
## 6 0 0 0 96 178 0.0
## srv_serror_rate rerror_rate srv_rerror_rate same_srv_rate diff_srv_rate
## 1 0.0 0 0.0 1.00 0.00
## 2 0.0 0 0.0 0.08 0.15
## 3 0.0 0 0.1 1.00 0.00
## 4 0.2 0 0.0 1.00 0.00
## 5 0.0 0 0.0 1.00 0.00
## 6 0.0 0 0.0 1.00 0.00
## srv_diff_host_rate dst_host_count dst_host_srv_count dst_host_same_srv_rate
## 1 0.00 150 25 0.17
## 2 0.00 255 1 0.00
## 3 0.20 255 250 0.98
## 4 0.00 30 255 1.00
## 5 0.09 255 255 1.00
## 6 0.02 255 254 1.00
## dst_host_diff_srv_rate dst_host_same_src_port_rate dst_host_srv_diff_host_rate
## 1 0.03 0.17 0.00
## 2 0.60 0.88 0.00
## 3 0.01 0.00 0.00
## 4 0.00 0.03 0.04
## 5 0.00 0.00 0.00
## 6 0.01 0.01 0.00
## dst_host_serror_rate dst_host_srv_serror_rate dst_host_rerror_rate
## 1 0.00 0.00 0.05
## 2 0.00 0.00 0.00
## 3 0.00 0.00 0.00
## 4 0.03 0.01 0.00
## 5 0.00 0.00 0.00
## 6 0.00 0.00 0.00
## dst_host_srv_rerror_rate code type
## 1 0.00 20 normal
## 2 0.00 15 normal
## 3 0.00 21 normal
## 4 0.01 21 normal
## 5 0.00 21 normal
## 6 0.00 18 normal
当我运行data$normal
时,它在数据$normal中给出了错误:“closure”类型的对象是不可子集的
。你应该构造一个例子,使你的问题重现。“我有这段代码”啊!你为什么有那段代码!删除它,创建一个查找表(本质上就是您要求的“与级别相关的值”),然后执行合并
或其他操作,而不是那种怪物。并且要意识到,如果您按照您的方式执行操作,您只会覆盖值,而不会保留映射。一旦您将“ipsweep”
和“portsweep”
和“nmap”
全部设置为“3”
,就无法返回了!您所拥有的只是一堆值“3”
行以及您过去使用的代码。@Gregor,亲爱的,有没有关于我如何做到这一点的提示?以及许多其他内容当我运行data$normal
时,它会给我数据$normal中的错误:“closure”类型的对象是不可子集的。你应该构造一个例子,使你的问题重现。“我有这段代码”啊!你为什么有那段代码!删除它,创建一个查找表(本质上就是您要求的“与级别相关的值”),然后执行合并
或其他操作,而不是那种怪物。并且要意识到,如果您按照您的方式执行操作,您只会覆盖值,而不会保留映射。一旦您将“ipsweep”
和“portsweep”
和“nmap”
全部设置为“3”
,就无法返回了!你所拥有的只是一堆值“3”
的行,以及你在那里使用的代码。@Gregor,亲爱的,有什么关于我如何做到这一点的提示吗?还有很多others@Brown覆盖原始代码中的字符数据。这就是为什么你不能访问它。在我建议的解决方案中,您可以创建一个新列来存储新值。@如果您覆盖了原始代码中的字符数据。这就是为什么你不能访问它。在我建议的解决方案中,创建一个存储新值的新列。