【问题标题】:Access colnames of sequentially named data frames访问按顺序命名的数据帧的列名
【发布时间】:2014-10-20 20:05:34
【问题描述】:

我有一系列按顺序命名的数据帧,即“frame_1”“frame_2”frame_3”等...到目前为止,我想使用循环或类似方法将每个帧的第一行设为 colnames我试过了:

for( i in 1:length(holder)){
  colnames( noquote(paste("frame_",i,sep="")))<- (noquote(paste("frame_",i,sep="")))[1,]
}

但是这给了我错误

Error in unclass(x)[...] : incorrect number of dimensions

我无法理解,因为它应该传递 colnames 函数 "frame_1" "frame_2" e.t.c

非常感谢任何帮助!

【问题讨论】:

    标签: r


    【解决方案1】:

    我建议将所有数据框保存在一个列表中,而不是多个对象中。这是一种方法:

    # get the names of the data frames
    frame_names <- ls(pattern = "^frame_\\d+$")
    
    # put all data frames in a list
    frames <- mget(frame_names)
    
    # change the column names of all data frames in the list
    frames <- lapply(frames, function(x) setNames(x, x[1, ]))
    

    之后,您可以访问列表frames 中的数据框。例如,frames[[1]] 返回第一个数据帧 (frame_1)。

    【讨论】:

    • 嗨,Sven,你知道学习这种方法的好资源吗?特别是你的第三行代码。
    • @user1987097 您可以查看帮助页面?lapply。函数lapply 允许您将函数应用于列表中的所有元素。在此示例中,列表元素是数据框。在函数中,参数x代表数据框。函数setNames 将数据框的列名(x)更改为第一行中的值(x[1, ])。
    • 所以我可以更早地定义我自己的书面函数,例如删除传递给它的参数的第一行(或任何分配任务),然后使用您在答案中的形式应用它到数据框列表?
    • @user1987097 是的,你可以定义自己的函数。
    猜你喜欢
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2018-08-29
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多