2017-05-17 36 views
0

我列出了矢量中的所有数据框,并通过从矢量(list_all)调用数据框对数据框执行不同的操作。我正在尝试使用第一行将colname分配给每个数据帧。如何在R环境中为其第一行中的多个数据框指定名称

#table_1 
      V1    V2    V3    V4    V5 
1:  caffeine    ACHE   Adora1   ADORA1   Adora2a 
2:     7.25- 7.25 15.00- 44.00 44.00- 49.00  9.40- 48.10 

#table_2 
      V1  V2 
1: paraxanthine daf-12 
2:     NA 

#table_3 

      V1    V2    V3    V4    
1: theophylline   Adora1   ADORA1   Adora2a   
2:     0.70- 26.00 0.00- 20.00 1.31- 25.30 

list_all <- c("table_1","table_2","table_3") # this list was derived from previous code of 60 lines 
n_drugs <- 3 
drug_names <- c("caffeine","paraxanthine","theophylline") 
output_final <- matrix(ncol=n_drugs , nrow=1) 

for (t in 1:length(list_all)){ 
    output_final[t] <- paste(drug_names[t],"output_final", sep = "_") 
    names_all <- c() 
    names_all[t,] <- unlist(c(as.character(get(noquote(list_all[t]))[1,]))) #saving colnames in 'names_all' 
    names_all[t,1] <- c("drug_name")  # change first column name 
    assign(output_final[t],setnames(get(noquote(list_all[t])),colnames(get(noquote(list_all[t]))),names_all[t,])) 
    } 

当我通过线运行此行代码它的工作原理,但是当我做funtion和运行funtion我收到错误

“错误GET(noquote(list_all [T])):对象'没有找到“。帮我走出

+0

colnames显示您的数据框的第一行了,通常,你应该做的东西像征'读.csv(...,header = TRUE)',当你第一次读取你的数据时,在这个阶段修复比在这里试图做的任何事情都容易得多。 – Marius

+0

请提供不起作用的代码 – HubertL

+0

看起来好像你正在尝试某种在其他编程语言中有意义的东西,但不一定是R ......关于你想要做什么的更多细节将有所帮助 – Rilcon42

回答

2

像上面的评论一样,在导入数据时应该更容易处理这个问题,例如, read.table(..., header = TRUE)

然而,如果你不知何故不能做到这一点,该解决方案可以为你工作:

set_first_row_name <- function(X) { 
    X <- as.data.frame(X) 
    # X should be a data frame 
    names(X) <- X[1,] 
    X[-1,] 
} 
for (the_one_table in list_all) { 
    # list_all is your created name list of tables 
    # Do set_first_row_name to each table and assign them back respectively 
    assign(the_one_table, set_first_row_name(get(the_one_table))) 
} 
+0

运行时正常工作,正如我所说的那样,在原始表格上执行了很多操作,并且由于各种原因删除了许多列。所以虽然header = True,但它并不重要。我不想列出所有表格。我想分开给他们。 –

+0

然后,只需在'for'循环中指定'而不是'lapply'来满足您将它们分开的需要。 – ytu

+0

@mr_swap我刚刚重新回顾我以前的答案。为你做了一些编辑。我知道这已经很长时间了,但你仍然可以看到这是否有帮助。 – ytu

相关问题