我知道这个问题以前曾被问过,但我无法让它对我有用,我发誓我尝试了多种方法来做到这一点,从循环文件到套用。我有一些表要替换第2列到第7列的S标头,这些标头现在采用这种格式:“ X1”,“ X2”,“ X3”,“ X4”,“ X5”,“ X6”,“ X7” ”,“ Phylum”,“ Class”,“ Order”,“ Family”,“ Genus”,“ Species”。
每个表没有相同数量的行或列。
我的31张桌子如下所示:
step4 <- list.files(pattern="*.coldrop.tsv")
另外,这是一个“子问题”,我从第二列开始进行操作,因为RAM不断添加行号(1,2,3,4,5,6 .... n)。如果有人可以在这里帮助我,那就太好了。我需要在所有这些“步骤4”表列表中进行操作。这是我想做的一些“样本”。
当我先尝试时,我选择了for file in loop选项:
colnames <- c("Kingdom", "Phylum", "Class", "Order", "Family", "Genus", "Species")
以下适用于单个文件
names(Omlo_run11_table.tsv.step1.tsv.step2.tsv.step3.tsv.coldrop.tsv)[2:8] <- c("Kingdom", "Phylum", "Class", "Order", "Family", "Genus", "Species")
i = 1
for(i in 1:length(step4)){
names(step4[i])[2:8] <- c("Kingdom","Phylum","Class","Order","Family","Genus","Species")
}
我得到这个:名称错误(step4 [i])[2:8] <-c(“ Kingdom”,“ Phylum”,“ Class”,“ Order”,“ names”属性[8]必须相同长度作为向量[1]
names(get(step4[i]))[names(get(step4[i])) == "X1","X2","X3","X4","X5","X6","X7"] <- c("Kingdom","Phylum","Class","Order","Family","Genus","Species")
我得到这个:名称(get(step4 [i]))[名称(get(step4 [i])))==“ X1”,“ X2”,“ X3”,错误:下标数目不正确
for(i in 1:length(step4)){
nm <- paste0("step4[i]")
tmp <- get(nm)
colnames(tmp)[2:8] <- c("Kingdom", "Phylum", "Class", "Order", "Family", "Genus", "Species")
assign(nm, tmp)
}
我得到这个:get(nm)中的错误:找不到对象'step4 [i]'
lapply (step4, function(df) { colnames(df)[2:length(step4)] <-colnames[1:length(step4)]-1)}
依此类推...我更喜欢个人类型的文件,但是我愿意接受选择。我遇到了带有setnames的解决方案,但也无法解决。.请有人帮我...
使用step4字符向量作为@Gregor注释,只需创建一个数据帧列表。然后,迭代地重命名每个df的列,这些列都可以在一个lapply()
匿名函数中处理。另外,由于要使用制表符分隔的文件,因此需要通用read.table()
功能(其中read.csv
是逗号分隔文件的特殊包装):
step4 <- list.files(path = tsvfilepath, pattern=".*tsv$", full.names = TRUE)
dfList <- lapply(step4, function(i) {
df <- read.table(i, sep="\t", quote="", header=TRUE, as.is=FALSE)
names(df)[2:8] <- c("Kingdom","Phylum","Class","Order","Family","Genus","Species")
return(df)
})
该列表对于各种需求(例如单个数据帧或一个主数据帧)变得很有用。
对于单个df,请考虑setNames()
分别命名每个名称并list2env()
创建单独的环境对象。下面为每个df提供与其相应文件名相同的名称:
dfList <- setNames(dfList, step4)
list2env(dfList, envir=.GlobalEnv)
对于将所有数据帧附加在一起的一个大型主df,您将面临列数不完整的挑战。因此,请考虑使用第三方软件包来填充dfs中缺少的列:
library(plyr)
rbind.fill(dfList)
library(dplyr)
bind_rows(dfList)
library(data.table)
rbindlist(dfList, fill=TRUE)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句