从变量的内容设置向量/数据框列名

时间:2016-06-15 01:40:44

标签: r

我正在创建如下所示的数据框:

            overlap   D     R
H3K9ME3    2635 209 91237

但是我有一些缺少一个或多个列。我需要创建这些列并为条目赋值NA。我试图创建一个循环,可以从列表(字符向量)中搜索缺少的列,并填写任何缺少的列。

以下是一个例子:

# this one is missing a column:
t_table<-structure(list(overlap = 14L, R = 59329L),
                     .Names = c("overlap","R"),
                     class = "data.frame", row.names = "H3K27ME3")
> t_table
         overlap     R
H3K27ME3      14 59329

在这个循环中,我尝试搜索并添加缺少的列:

t_table2<-t_table
  for(column in c("overlap","D","R")){
    if( ! column %in% colnames(t_table2)) t_table2<-cbind(t_table2,column=NA)
  }
  t_table2

但是,列名称是&#34;列&#34;的文字字符串。而不是column的价值;

> t_table2
         overlap     R column
H3K27ME3      14 59329     NA

如何设置此项,以便生成的列名称是对象column的值,而不是&#34;列&#34;,在这种情况下?

1 个答案:

答案 0 :(得分:1)

您可以使用setNames动态设置新数据框的列名称:

t_table2<-t_table
for(column in c("overlap","D","R")){
    if( ! column %in% colnames(t_table2)) {
        t_table2<-setNames(cbind(t_table2,NA), c(names(t_table2), column))
}}

t_table2
         overlap     R  D
H3K27ME3      14 59329 NA