0

我有一个文件在不同的行中有不同的记录类型,这可以使用该行的第一列值来识别,下面给出了一个示例数据集

V1  V2    V3   V4
 1  ABC   DEF  10
 1  XYZ   QWE  11
 2  ASD   WER  1
 1  QWE   SDF  34
 2  FGH   AXD  35

现在,我想读取这个文件,但不是整个文件,而只是那些 V1 值为 2 的行,并且想要丢弃值为 1 的行。这可以在 SAS 中轻松完成,如果我们必须在 R 中完成,我们可以读取整个文件,然后对其进行子集化。但是我不想读取整个文件然后读取子集,是否可以在读取时读取这些特定行。

感谢您的回答。

4

2 回答 2

5

我喜欢将 R 与管道结合使用——借助连接功能,我们可以一次性完成:

 R> X <- read.table(pipe("awk '($1 != 1) {print $0}' /tmp/pawan.csv"), 
 +                  header=TRUE) 
 R> X    
   V1  V2  V3 V4 
 1  2 ASD WER  1  
 2  2 FGH AXD 35 
 R>   

这里我们只保留一个条件(忽略值 V1 等于 1 的行),但是在 awk、sed、perl、python、...

于 2013-09-18T18:16:53.273 回答
4

我实际上只是在学习sed自己,而且我也不是最擅长正则表达式的人,所以这是一个公开的邀请,不仅要提及评论中的改进,还要直接编辑它:

system("sed -e '2,${ /^.1/d; }' ~/Desktop/test.txt > ~/Desktop/test1.txt")

那应该跳过第一行(标题),然后删除所有以空格和 1 开头的行。(当我将示例数据复制+粘贴到我的计算机上时,这就是你的示例数据最终的样子。)

于 2013-09-18T17:14:48.860 回答