我有名为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
....
答案 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)
}