【问题标题】:Assigning first row to be column names of a data frame将第一行分配为数据框的列名
【发布时间】:2014-12-15 16:31:57
【问题描述】:

我正在尝试将数据框的第一行指定为 colnames,我的数据框是动态命名的,例如“frame_1”“frame_2”等

我是这样做的:

for( i in 1:length(holder)){
  colnames(eval( parse(text=paste0("frame_",i))) )<- eval( parse(text=paste0("frame_",i,"[1,]")))
}

但是这会产生神秘的错误:

  target of assignment expands to non-language object

我觉得这很令人困惑,因为:

colnames(eval( parse(text=paste0("frame_",i))) )

为 frame_i 生成 colnames 向量

eval( parse(text=paste0("frame_",i,"[1,]")))

产生第一行 frame_i。

这两个是相同的长度,如果有人能向我解释这个错误,我将非常感激

一些代码可以生成与我相似的数据集:

for( i in 1:1000){
assign(paste("frame",i,sep="_"), data.frame(  c("desired_colname", 4, 3, 5, 7) , c("desired_colname2", 3, 1, 2, 3) )) }

所以我想把“desired_colname”作为列名。

【问题讨论】:

  • 请给我们一个可重现的例子。
  • @RichardScriven 不,事实并非如此。我将编写一些代码为您生成可重现的数据。
  • @user1987097 你试过下面的代码吗?
  • 它破坏了一堆数据框,当我尝试查看它们时返回错误“视图中的错误:未定义的列选择”
  • @user1987097 不在我创建的示例中。

标签: r


【解决方案1】:

试试

frame_1 <-  data.frame(c("desired_colname", 4, 3, 5, 7) , 
                                 c("desired_colname2", 3, 1, 2, 3) )
frame_2 <-  data.frame( c("desired_colname", 4, 2, 6, 7) ,
                             c("desired_colname2", 3, 5, 3, 3) )
frame_3 <-  data.frame(c("desired_colname", 5, 6, 9, 5) ,
                             c("desired_colname2", 5, 9, 14, 3) )


holder <- ls(pattern="^frame_")

for(i in holder){
 tmp <- get(i)
 colnames(tmp) <- unlist(get(i)[1,])
 assign(i, tmp)
}

上面的代码也可以写成:

  for(i in holder){
    assign(i, `names<-`(get(i), unlist(get(i)[1,])))
   }


 frame_1
#  desired_colname desired_colname2
#1 desired_colname desired_colname2
#2               4                3
#3               3                1
#4               5                2
#5               7                3


 frame_2
 # desired_colname desired_colname2
 #1 desired_colname desired_colname2
 #2               4                3
 #3               2                5
 #4               6                3
 #5               7                3

另一种选择是使用list2env

   list2env(lapply(mget(holder), function(x)
           {colnames(x) <- unlist(x[1,]);x}), envir=.GlobalEnv)
   #<environment: R_GlobalEnv>

不过,所有这些操作都可以在list 中完成,然后使用write.table 将其保存到文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 2021-01-14
    • 2021-04-27
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多