R,定义一个函数然后应用于列表

时间:2018-08-07 17:12:10

标签: r list function reshape

我正在尝试编写一个函数(并且我是R的新手,我对R的大部分知识都是从这个婚礼现场学到的,谢谢),

我想将我的功能应用于列表。该列表包含一些“ .CSV”文件。

我的文件夹中的所有CSV文件如下图所示,结构相同,但列号不同。

我想:

  1. 基于“框架”列,删除所有包含单词“ T”的行,
    然后我得到了“ 110 * n1”行数据。
  2. 删除所有包含“ Flag”字样的列,它们是空白列。
  3. 删除第一列。然后我有“ 2 * n2”列。
  4. 将多列重塑为2列数据,现在我得到了“ 110 * n3”行数据。
  5. 将“ 1,2,3,4,...,110”重复为n次,重复次数为n次,每次重新绑定为一列。
  6. 形成“ 1,2,3,...,n3”,每个重复110次,成为一个列。
  7. 将新表导出为txt文件。

enter image description here

这是我到目前为止所做的:

T_function <- function(x) {
    data.df <- read.csv(x, skip = 1,header=TRUE, na.strings=c("NA","NaN", " ","*"),
                        dec=".", strip.white=TRUE)
    filename <- substr(x = x, start = 1, stop = (nchar(x)-4))
    data.df[!grepl("T", data.df$Frame),]  
    data.df <- data.df [,-1]
    data.df <- data.df [,colSums(is.na(data.df))<nrow(data.df)]

    splitter <- function(indf, ncols) {
        if (ncol(indf) %% ncols != 0) stop("Not the right number of columns to split")
        inds <- split(sequence(ncol(indf)), c(0, sequence(ncol(indf)-1) %/% ncols))
        temp <- unlist(lapply(inds, function(x) c(t(indf[x]))), use.names = FALSE)
        as.data.frame(matrix(temp, ncol = ncols, byrow = TRUE))
    }

    out <- splitter(data.df, 2)
    list <- 1:110
    from <- which(out$V1 == 1)
    to <- c((from-1)[-1], nrow(out)) 
    end <- c(to/110)
    list2 <- rep(list,length(to/110))

    out$Number <- unlist(list2)
    out$Number <- as.factor(out$Number)
    list3 <- rep(1:end,each=110)
    out$slice <- unlist(list3)
    out$slice <- as.factor(out$slice)

    write.table(x = data.df, 
                file = paste0(filename, "_analysis.txt"), 
                sep = ",",quote=F)
}

该函数似乎无法添加正确的“ out $ Number”和“ out $ slice”。

filenames <- list.files(path = "",pattern="csv",full.names = T)

sapply(filenames, FUN = T_function)

我正在尝试将功能应用于列表中的所有文件,而似乎在第一个文件旁边我无法使用其他文件。

有人可以帮助我找出并解决问题吗?

0 个答案:

没有答案