我试图写一个函数(我是R的新手,我的大部分知识都是从这个网站学习的,谢谢)
我想把我的功能应用到一个列表中。列表包含一些“.csv”文件。
在我的文件夹中的所有CSV文件看起来像下面的图片,相同的结构,但具有不同的列号。
我想:
-
基于“frame”列,删除所有包含单词“t”的行,
然后我得到“110*n1”行数据。
-
删除所有包含“标志”字的列,它们是空列。
-
删除第一列。然后是“2*n2”列。
-
将mulit列重塑为2列数据,现在得到“110*n3”行数据。
-
重复“1,2,3,4,…,110”作为SEEILS数,n次(n=N3),重新绑定为列。
-
表格“1,2,3,…,n3”,每重复110次,做成一个小柱。
-
将新表导出为TXT文件。
以下是我迄今为止所做的:
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)
我试图将我的功能应用于列表中的所有文件,而在第一个文件旁边,我似乎无法让其他文件工作。
有人能帮我找出并解决问题吗?