【问题标题】:Convert row names in multiple data frames to column in data frame将多个数据框中的行名转换为数据框中的列
【发布时间】:2013-08-26 12:38:43
【问题描述】:

我有一个 .csv 文件列表,我已读入 R 并放置在一个名为 data 的大型数据框中,该数据框由 6 个 data.frames 组成,它们是 filenames 中的 6 个文件。到目前为止,我的代码是:

filenames <- list.files( paste(mainDirInput,sep=""), pattern="Out.*csv", full.names=TRUE) 
data = lapply(filenames, function(f) {
wb = read.csv(f, header=TRUE)
})

每个 data.frame 中的行名和列名完全相同,我想提取行名并将它们作为 R 中的第一列。我的一个数据框的示例如下:

            w    x    y    z
2012 01     12   43   87   09
2012 02     14   53   75   76
2012 03     76   34   76   28
2012 04     41   36   85   16
  :         :    :    :    :
  :         :    :    :    :

我还需要能够在其他文件上使用此代码,所以我不能简单地使用值 2012 01, 2012 02, 2012 03... 创建一个新列

【问题讨论】:

    标签: r dataframe rowname


    【解决方案1】:

    你有一个 dataframe 列名为 "w,x,y,z" 。做吧

    data$names <- rownames(data) 
    

    添加新列。

    编辑

    响应 Boogie 的询问,这里是 lapply,带有一个匿名函数来执行循环。

       foo = as.data.frame(matrix(1:15,3,5))
        rownames(foo) <-c('frist','prime','lastly')
        foo
        bar = list(foo,t(foo), rbind(foo,foo))
        bar[[1]] = as.data.frame( foo)
        bar[[2]] =data.frame( t(foo))
        bar[[3]] = data.frame(rbind(foo,foo))
        bar
        bar = lapply(bar,FUN= function(x) { x$date <-rownames(x);return(x)})
        bar
    

    【讨论】:

    • 谢谢,这适用于我的个人 data.frames,所以如果我将它应用到 data[[1]]$names&lt;-rownames(data[[1]])data 是 6 个个人 data.frames 的列表,我正在寻找一种将类似于你给我的东西应用到data中的所有data.frames的方法。
    • 哦,如果我在 for 循环中应用它就可以了! for (k in 1:length(data)){ data[[k]]$date &lt;- rownames(data[[k]]) }谢谢你的帮助
    • 有没有办法用lapply() 做到这一点,而不仅仅是一个for循环?
    • @Boogi 几乎任何for 循环都可以变成*apply 调用。在这种情况下,您可能需要定义一个匿名函数。请参阅我的编辑以获取示例
    猜你喜欢
    • 1970-01-01
    • 2017-10-17
    • 2017-01-20
    • 1970-01-01
    相关资源
    最近更新 更多