2012-08-15 55 views
-2

我希望在每个文件中更改列名称之一(第14列),但我无法确定如何处理它。我已经尝试了多种应用,但是这种方法不起作用,我不知道从哪里开始寻找另一种方法。这里是我的代码到目前为止:在R中适用于更改列名称

File.names<-(tk_choose.files(default="", caption="Files", multi=TRUE, filters=NULL, index=1)) 
Num.Files<-NROW(File.names) 
test<-sapply(1:Num.Files,function(x){readLines(File.names[x])}) 
lapply(1:Num.Files, function(x){data<-read.table(header=TRUE, text=test)}) 
#This is the issue 
names(data)[14]<-'column14' 
names(data) 

正如我所提到的,我试过不同类型的应用,但无济于事。有没有不同的方式去做这件事?欢迎大家提出意见。

+3

我在你的最后一个问题中提到这一点,但你要通过你的两个'sapply'的专业体操然后'lapply'步骤是不必要的。只需使用一行'lapply'(File.names,read.table,sep ='\ t',header = TRUE)'。然而,它不工作的原因是因为你在一个函数内部读取了你的数据,但是从来没有把这个函数的输出分配给任何东西。添加一个'data < - lapply(...',你将得到一个data.frames列表,然后你需要再次使用'lapply'来改变名字 – Justin 2012-08-15 15:29:13

+0

@Justin如果我试图将两行合并成一个,如你所说:data <-lapply(File.names,read.table,sep ='\ t',header = TRUE) lapply(names(data)[14] < - 'column14') 我得到一个错误在FUN(“/ home/Stephanie/Data/sample 2.ra.rc.bam.EXOME.DOC.sample_interval_summary”[[1L]],:列列数多于列名称 – Stephopolis 2012-08-15 15:42:00

+0

@Stephopolis它看起来像你的击中你的头靠在墙上,并一次又一次地询问同样的东西(根据先前的问题)。也许将你的代码分解成功能部分,然后询问关于该部分的具体问题会有帮助吗?能够重现准确性的人越多问题越多,将在帮助。 – Thell 2012-08-15 15:45:13

回答

0

先将名称分开,然后进行更改,然后将其分配为组。像,

new.names <- names(data) 
new.names[[14]] <- `column14` 
names(data) <- new.names 
+0

'names'属性[14]的长度必须与向量的长度相同[1]您能向我解释这个错误吗? – Stephopolis 2012-08-15 19:15:15

+0

是的,它意味着'new.names'和''data'向量的长度不匹配。当你分配new.names [[14]]并且new.names是(假设)10 long时,那么new.names会“增长”到14,当你尝试将名称分配给数据时,长度不再匹配,你会得到那个错误。 – Thell 2012-08-15 20:07:24

0

你必须调用names另一个lapply。例如: -

l <- list(x=c(a=1, b=1), y=c(a=1, b=1)) 
l2 <- lapply(l, function(x) { 
    names(x)[2] <- "d" 
    return(x) 
}) 

l2 
#$x 
#a d 
#1 1 
# 
#$y 
#a d 
#1 1