当在一个文件夹中的一个文件上运行此脚本时:
emboss<-read.table("emboss_012.ss",header=T)
x<-table(emboss[,2],emboss[,3])/NROW(emboss[,3])
y<-as.vector(t(x))
nms <- expand.grid(colnames(x), rownames(x))
names(y) <- paste( nms[,2],nms[,1],sep="")
write.table(t(y), file = "test3.csv",append=TRUE)
我得到了想要的结果
然而,对文件夹中的所有文件一次执行此操作会导致随机出现NA。我是这样做的:
runForAll <- function(x) {
emboss <- read.table(x,header=T)
x <- table(emboss[,2],emboss[,3])/NROW(emboss[,3])
y <- as.vector(t(x))
nms <- expand.grid(colnames(x), rownames(x))
names(y) <- paste( nms[,2],nms[,1],sep="")
return(t(y))
}
my.files <- list.files(pattern = "emboss_\d+\.ss")
outputs <- lapply(my.files, FUN = runForAll)
library(plyr)
one.header.output <- rbind.fill.matrix(outputs)
write.table(one.header.output, file = "nontpsec.csv")
和我的文件位于这里:
https://drive.google.com/folderview?id=0B0iDswLYaZ0zWjQ4RjdnMEUzUW8&usp=sharing
这是非常奇怪的,不知道为什么会发生,特别是当所有其他数据都是正确的,甚至在一次遍历所有文件时。
你的数据表是不同的长度,例如第一个有20行,最后一个只有19!这就是问题的来源。
这里有一个小测试:
tmp <- c("A", "C", "D", "E", "F", "G", "H", "I", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "V", "W", "Y")
which(rownames(x) %in% tmp)
在文件12和13的情况下,第二行缺失(标签B)。
看看这篇文章:
比较两个data.frames找出data.frame 1中没有的行
这可能对你有用:
为data.frame中缺失的值添加行最快的方法?