【发布时间】:2016-12-15 23:26:30
【问题描述】:
我知道以前有人问过这个问题,但我无法让它为我工作,我发誓我尝试了很多方法来做到这一点,从 for file in loops 到 lapply。 我有表格,我想替换现在采用以下格式的第 2 到 7 列标题:“X1”、“X2”、“X3”、“X4”、“X5”、“X6”、“X7” ” 分为“王国”、“门”、“类”、“目”、“科”、“属”、“种”。
每个表的行数和列数都不相同。
我的 31 张桌子是这样列出的:
step4 <- list.files(pattern="*.coldrop.tsv")
另外,这是一个“子问题”,我从第 2 列开始,因为 RAM 不断添加行号 (1,2,3,4,5,6....n)。如果有人可以在这里帮助我,那就太好了。我需要在所有这些“step4”列表中执行此操作。 这是我想做的一些“样本”。
当我第一次尝试时,我选择了 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]
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]))[names(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)}
等等…… 我更喜欢文件类型的人,但我对 lapply 选项持开放态度。 我遇到了带有 setnames 的解决方案,但也无法弄清楚.. 有人能帮帮我吗...
【问题讨论】:
-
看起来
step4是尚未读入 R 的文件名的字符向量。(除非您省略读取文件并将文件列表分配给同一对象的代码。 ) 字符向量没有列名 - 您必须先将它们作为数据帧读入。 -
另外,请不要使用
rstudio标签,除非您的问题是关于代码编辑器 RStudio(如果您对正在编写的电子邮件有语法问题,您不会使用 @ 987654330@标签)。 -
嗨,我用这个:step4 = list.files(pattern="*.coldrop.tsv") for (i in 1:length(step4)) assign(step4[i], read. csv(step4[i], sep="\t", quote="", header=TRUE, as.is=FALSE))。对不起 Rstudio!
-
你不应该使用
assign,它会让事情变得混乱和困难。取而代之的是use a list of data frames。 -
哦,很高兴知道。我是 R 语言的新手,所以任何建议都会有所帮助。我避免使用数据框的原因是因为我不知道每个表的行数和列数,并且它们之间确实发生了变化。虽然,我知道第一列(1-8)总是相同的......对我来说这似乎是一个问题,因为你似乎必须在数据框命令中给出表格的“大小”,或者我是完全误解了它。?