根据第一列值读取特定的文件行

时间:2013-09-18 16:05:36

标签: r

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

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中,我们可以读取整个文件然后对其进行子集化。但我不想读取整个文件然后是子集,是否可以在阅读时读取这些特定的行。

感谢您的回答。

2 个答案:

答案 0 :(得分: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等中都可以轻松做很多...

答案 1 :(得分:4)

我实际上只是在学习sed,而且我也不是正则表达式中的佼佼者,所以这是一个公开的邀请,让人们不仅要提及评论的改进,而且要直接编辑:< / p>

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

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