将列更改为索引

时间:2014-07-14 22:50:59

标签: r

我有一个像下面这样的表格,我试图以第一列成为索引的方式转换它,即我可以使用类似条形图的函数。

               TFR_TT      ML            BGT  
1                0       26795        1577776.4
2                2        2779         432500.0
3                6           1            187.2

如下所示

                        ML            BGT  
               0       26705         1577776.4
               2        2779          432500.0
               6           1             187.2

然后运行折线图,这样我就可以获得0,2,6作为ML轴和X轴之间的点作为BGT

1 个答案:

答案 0 :(得分:2)

要获取索引,您必须设置rownames()。在过去,我使用了as.table.data.frame()辅助函数来执行

#sample data
dd<-structure(list(TFR_TT = c(0L, 2L, 6L), ML = c(26795L, 2779L, 
1L), BGT = c(1577776.4, 432500, 187.2)), .Names = c("TFR_TT", 
"ML", "BGT"), class = "data.frame", row.names = c("1", "2", "3"
))

barchart(as.table(dd, rownames=1)[,-1])

如果您指定rownames=参数,则会负责重新格式化对象并设置名称。

我将在此处包含源代码以获得完整性

as.table.data.frame<-function(x, rownames=0) {
    numerics <- sapply(x,is.numeric)
    chars <- which(sapply(x,function(x) is.character(x) || is.factor(x)))
    names <- if(!is.null(rownames)) {
        if (length(rownames)==1) {
            if (rownames ==0) {
                 rownames(x)
            } else {
                as.character(x[,rownames])
            }
        } else {
            rownames
        }
    } else {
          if(length(chars)==1) {
            as.character(x[,chars])
        } else {
            rownames(x)
        }
    }
    x<-as.matrix(x[,numerics])
    rownames(x)<-names
    structure(x, class="table")
}