我有一个文件在不同的行中有不同的记录类型,这可以使用行的第一列值来识别,下面给出了一个样本数据集
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中,我们可以读取整个文件然后对其进行子集化。但我不想读取整个文件然后是子集,是否可以在阅读时读取这些特定的行。
感谢您的回答。
答案 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>