如何在R中的每个文件上应用此功能?

时间:2014-10-05 07:48:35

标签: r

我有名为P1.txt P2.txt ........P100.txt的文件。 我想对每个文件应用以下函数:

temp <- P1.txt
colnames(temp) <- c("a","b")
temp <- aggregate(count~a+b,transform(temp,a=pmin(a,b), b=pmax(a,b), count=1),sum)
colnames(temp) <- c("V1","V2","V3")
P1.txt <- temp

如何为每个文件自动执行此操作? 我能够提出`paste0(&#34; P&#34;,i,&#34; .txt&#34;),其中我将从1到100不等但我不知道如何再分配一次?谢谢!

编辑:单个文件是最初包含两列和1000行的数据帧。 样本:(P1.txt)

1 2
3 4
4 2
4 5
....

2 个答案:

答案 0 :(得分:1)

由于您还未向我们提供文件的结构,因此只能给出部分答案...

如果您想要读入这些文件并将其写出来,那么您需要明确地执行此操作,例如read.csv()write.csv()。那么你可以:

for(i in 1:100) {
  fnam <- paste('P', i, '.txt', sep='')
  temp <- read.csv(fnam, header=FALSE)
  # manipulate the contents...
  colnames(temp) <- c("a", "b")
  temp <- aggregate(count ~ a + b,
                    transform(temp, a = pmin(a, b), b = pmax(a, b), count = 1), 
                    sum)
  colnames(temp) <- c("V1", "V2", "V3")
  # save the results
  write.csv(temp, fnam, row.names=FALSE, col.names=FALSE)
}

但是,在确认其使用之前,请注意使用此功能。正确,因为你冒着覆盖你的P1..P100.txt文件的风险!

答案 1 :(得分:1)

这是一种方法。

# generate list of files
files <- list.files(pattern = "^P\\d+\\.txt$")

for (file in files) {
  temp <- read.table(file)
  colnames(temp) <- c("a", "b")
  temp <- aggregate(count ~ a + b,
                    transform(temp, a = pmin(a, b), b = pmax(a, b), count = 1), 
                    sum)
  colnames(temp) <- c("V1", "V2", "V3")
  write.table(temp, file, row.names = FALSE)
}