修改文件列表中的文件名,并将其添加为新列

时间:2016-11-28 05:11:45

标签: r lapply

我有一个问题,即为列表的每个元素添加新列,其中包含这些文件的修改名称。到目前为止,我能够substr创建文件名列,但另一方面,我无法在此列中添加新字符串,例如“最佳”或“最差”字词。

这是我可重复的尝试,

此部分仅用于生成.txt文件到工作目录!

writeFiles <- function(n, maxRows=10){
  lapply(seq(10,90,10),function(x) write.table(sample(sample(maxRows)[1],replace=F),paste(x,'.txt',sep=""), quote=FALSE, col.names = FALSE,row.names=FALSE))
}    
writeFiles(9,10)

filesToProcess <- dir(pattern = "*\\.txt")

"10.txt" "20.txt" "30.txt" "40.txt" "50.txt" "60.txt" "70.txt" "80.txt" "90.txt"

在下一步中,我将读取此文件并修改仅包含.txt文件的第一个字符的文件名列。

data.list  <-  lapply(filesToProcess,function(x){
  tmp <- read.table(file=x, header = F,fill=T, comment.char='*')
#  tmp$filenames <- paste0(substr(x,1,1),c("best","worst"),sep="")
  tmp$filenames <- substr(x,1,1)

  return(tmp)
})

     data.list
        [[1]]
          V1 filenames
        1  4         1
        2  3         1
        3  7         1
        4  8         1
        5  1         1
        6  2         1
        7  6         1
        8  5         1

        [[2]]
          V1 filenames
        1  4         2
        2  1         2
        3  5         2
        4  3         2
        5  2         2
        6  6         2
        7  7         2

        [[3]]
          V1 filenames
        1  1         3
        2  3         3
        3  2         3

确实,我还希望将新字符串添加到filenames列,并尝试在lapply内添加粘贴命令,

 data.list  <-  lapply(filesToProcess,function(x){
  tmp <- read.table(file=x, header = F,fill=T, comment.char='*')
  tmp$filenames <- paste0(rep(c("best","worst"),c(4,5)),substr(x,1,1),sep="")
    return(tmp)
})

$<-.data.frame中的错误(*tmp*,“文件名”,值= c(“best1”,#“best1”,:替换有9行,数据有8

所以前4个.txt文件被标记为最佳,剩下的5个文件是最差的.txt文件。

如何在lapply内完成?

1 个答案:

答案 0 :(得分:2)

我们可以将“数据列表”的前四个元素进行子集,循环显示它们,然后transform&#39;文件名&#39;列。

data.list[1:4] <- lapply(data.list[1:4], transform, filenames= paste0("best", filenames))

同样,对剩余的5个list元素

也可以这样做
data.list[5:9] <- lapply(data.list[5:9], transform, filenames= paste0("worst", filenames))

我们也可以通过&#39; filesToProcess&#39;通过创建vector最佳&#39;,&#39;最差&#39;然后循环遍历&#39; filesToProcess&#39;

的序列
v1 <- rep(c("best", "worst"), c(4, 5))
lapply(seq_along(filesToProcess),function(i){
    tmp <- read.table(file=filesToProcess[i], header = FALSE, fill=TRUE, comment.char='*')
    tmp$filenames <- paste0(v1[i], substr(filesToProcess[i],1,1), sep="")
    tmp
  })