2012-08-15 59 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