Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中数据表的多列选择与修改_R - Fatal编程技术网

R中数据表的多列选择与修改

R中数据表的多列选择与修改,r,R,我正在读取一些原始日志数据,并在解析之前对其进行预处理。我阅读了日志,然后添加了一列draw$rule,表示要应用的解析规则 > raw<-readLines("20130205000046 firewall_log.txt") > draw<-as.data.frame(raw) > draw$rule <- 0 > head(draw)

我正在读取一些原始日志数据,并在解析之前对其进行预处理。我阅读了日志,然后添加了一列draw$rule,表示要应用的解析规则

> raw<-readLines("20130205000046 firewall_log.txt")
> draw<-as.data.frame(raw)
> draw$rule <- 0
> head(draw)
                                                                                                                                    raw
1 2013 Feb  4 06:15:59 [UTM9S] [kernel] WAN2LAN[ACCEPT]  IN=WAN  OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=42415 DPT=80 
2 2013 Feb  4 06:16:22 [UTM9S] [kernel] WAN2LAN[ACCEPT]  IN=WAN  OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=63520 DPT=80 
3 2013 Feb  4 06:16:46 [UTM9S] [kernel] WAN2LAN[ACCEPT]  IN=WAN  OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=55379 DPT=80 
4 2013 Feb  4 06:17:10 [UTM9S] [kernel] WAN2LAN[ACCEPT]  IN=WAN  OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=49425 DPT=80 
5 2013 Feb  4 06:17:34 [UTM9S] [kernel] WAN2LAN[ACCEPT]  IN=WAN  OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=34270 DPT=80 
6 2013 Feb  4 06:17:39 [UTM9S] [kernel] WAN2LAN[ACCEPT]  IN=WAN  OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=35331 DPT=80 
  rule
1    0
2    0
3    0
4    0
5    0
6    0
>原始绘图$规则头(绘图)
未经加工的
1 2013年2月4日06:15:59[UTM9S][kernel]WAN2LAN[ACCEPT]IN=WAN OUT=LAN SRC=66.249.75.193 DST=192.168.1.38协议=TCP SPT=42415 DPT=80
2 2013年2月4日06:16:22[UTM9S][kernel]WAN2LAN[ACCEPT]IN=WAN OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=63520 DPT=80
3 2013年2月4日06:16:46[UTM9S][kernel]WAN2LAN[ACCEPT]IN=WAN OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=55379 DPT=80
4 2013年2月4日06:17:10[UTM9S][kernel]WAN2LAN[ACCEPT]IN=WAN OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=49425 DPT=80
5 2013年2月4日06:17:34[UTM9S][kernel]WAN2LAN[ACCEPT]IN=WAN OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=34270 DPT=80
6 2013年2月4日06:17:39[UTM9S][kernel]WAN2LAN[ACCEPT]IN=WAN OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=35331 DPT=80
规则
1    0
2    0
3    0
4    0
5    0
6    0
现在,我想根据原始日志数据中匹配的模式来标记行。下面的语句在某种程度上起作用,它使用1拾取行和标志draw$rule

> draw[grep("^.*ACCEPT.*PROTO=(TCP|UDP).*$",draw$raw),2] <- 1
> head(draw)
                                                                                                                                    raw
1 2013 Feb  4 06:15:59 [UTM9S] [kernel] WAN2LAN[ACCEPT]  IN=WAN  OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=42415 DPT=80 
2 2013 Feb  4 06:16:22 [UTM9S] [kernel] WAN2LAN[ACCEPT]  IN=WAN  OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=63520 DPT=80 
3 2013 Feb  4 06:16:46 [UTM9S] [kernel] WAN2LAN[ACCEPT]  IN=WAN  OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=55379 DPT=80 
4 2013 Feb  4 06:17:10 [UTM9S] [kernel] WAN2LAN[ACCEPT]  IN=WAN  OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=49425 DPT=80 
5 2013 Feb  4 06:17:34 [UTM9S] [kernel] WAN2LAN[ACCEPT]  IN=WAN  OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=34270 DPT=80 
6 2013 Feb  4 06:17:39 [UTM9S] [kernel] WAN2LAN[ACCEPT]  IN=WAN  OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=35331 DPT=80 
  rule
1    1
2    1
3    1
4    1
5    1
6    1
>draw[grep(“^.*ACCEPT.*PROTO=(TCP | UDP.*$”,draw$raw),2]头(draw)
未经加工的
1 2013年2月4日06:15:59[UTM9S][kernel]WAN2LAN[ACCEPT]IN=WAN OUT=LAN SRC=66.249.75.193 DST=192.168.1.38协议=TCP SPT=42415 DPT=80
2 2013年2月4日06:16:22[UTM9S][kernel]WAN2LAN[ACCEPT]IN=WAN OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=63520 DPT=80
3 2013年2月4日06:16:46[UTM9S][kernel]WAN2LAN[ACCEPT]IN=WAN OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=55379 DPT=80
4 2013年2月4日06:17:10[UTM9S][kernel]WAN2LAN[ACCEPT]IN=WAN OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=49425 DPT=80
5 2013年2月4日06:17:34[UTM9S][kernel]WAN2LAN[ACCEPT]IN=WAN OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=34270 DPT=80
6 2013年2月4日06:17:39[UTM9S][kernel]WAN2LAN[ACCEPT]IN=WAN OUT=LAN SRC=66.249.75.193 DST=192.168.1.38 PROTO=TCP SPT=35331 DPT=80
规则
1    1
2    1
3    1
4    1
5    1
6    1

我遇到的困难是扩展选择,以便只在与正则表达式匹配的行上工作,并将Dead $规则集设置为0,换言之,只考虑尚未匹配的行。我想就地更新draw$rule的值,而不是在此阶段提取子集

如何修改语句以实现这一点?最终结果是有一系列语句,如:

draw[<some selection condition 1> && draw$rule==0,2] <-1
draw[<some selection condition 2> && draw$rule==0,2] <-2
draw[<some selection condition 3> && draw$rule==0,2] <-3
  etc

draw[&&draw$rule==0,2]使用
grepl
代替
grep
。此函数返回与其参数长度相同的逻辑向量。另外,不要使用
&
,而是使用
&
<代码>&
用于单个元素,而
&
用于向量。使用
grepl
代替
grep
。此函数返回与其参数长度相同的逻辑向量。另外,不要使用
&
,而是使用
&
<代码>&&用于单个元素,而
&&
用于向量。