2014-02-23 114 views
0

我需要读取3列文件“001.txt”,并导出仅包含第二列的新名称“new001C2.txt”的文件。我可以一次完成一个文件,但是我刚开始时并没有找到一种自动的方法来处理目录中的所有文件。R读取txt文件将特定列写入新的txt文件

+0

分享你的代码与一个文件来做到这一点,我们可以帮你将其变成一个函数并将其应用于目录中的所有文件。 – Gregor

+0

谢谢舒雅。这是我可以用一个文件做的事情:X < - read.csv(“001.txt”,header = TRUE); X2 < - X [,2];写(X2,file =“new001C2.txt”,ncolumns = 1,sep =“”) – PTSDresearcher

回答

1

这可以用lapply完成。首先,制作所有文件名的列表。然后用lapply来阅读。这将每个文件放入一个列表中,因此“001.txt”将成为列表的第一个成员,并且可以通过readAll[[1]]进行访问。 newFiles创建新文件的列表,使数字与原始文件名保持一致。然后我们再使用lapply来将每个文件写入单独的文件。

files <- c("001.txt", "002.txt", "003.txt") 

readAll <- lapply(files, read.csv) 

col2 <- lapply(readAll, function(x) x[,2]) 

newFiles <- paste0("new", gsub(".txt", "", files), "C2.txt") 

lapply(1:length(col2), function(i) write(col2[[i]], newFiles[i])) 
+0

感谢RScriv。我不知道为什么它不工作:lapply(文件,read.csv)中的错误[,2]:不正确的维数 – PTSDresearcher

+0

对不起。我认为现在已经解决了。 –

+0

感谢RScriv。最后一个问题。新名称必须保留旧文件名中的数字,不幸的是,这些数字都与数字之间的空格有关。例如,如果第一个主题是005.txt,他是列表中的第一个,所以他的新文件是new001C2而不是new005C2。谢谢你的帮助! – PTSDresearcher

0

如果你是一个基于Linux的系统上,这里有一个简单的解决方案,你可以直接从shell中运行:

cut -f 2 001.txt > new001C2.txt