数据框列表第一列到rownames

时间:2017-05-14 15:19:21

标签: r list

我有......

X  <- list(df1  <- data.frame(A=c("CC","CC(=O)C","CC(=O)O"),conc=c(1.0,2.2,1.0),Vol=c(2,4.5,6),stringsAsFactors=FALSE), df2  <- data.frame(A=c("COC","O=CC"),conc=c(2.0,3.2),Vol=c(10,23),stringsAsFactors=FALSE))
X
[1]]
        A conc Vol
1      CC  1.0 2.0
2 CC(=O)C  2.2 4.5
3 CC(=O)O  1.0 6.0

[[2]]
     A conc Vol
1  COC  2.0  10
2 O=CC  3.2  23

我希望将第一列更改为rownames。

我尝试了显而易见的,

X <-lapply(X,function(a) {rownames(a)  <- a$A})

但这不起作用......

我开始尝试使用mapply函数但是我没有做得很远......

2 个答案:

答案 0 :(得分:2)

使用dplyr和tibble column_to_rownames

可以实现
X  <- list(df1  <- data.frame(A=c("CC","CC(=O)C","CC(=O)O"),conc=c(1.0,2.2,1.0),Vol=c(2,4.5,6),stringsAsFactors=FALSE), df2  <- data.frame(A=c("COC","O=CC"),conc=c(2.0,3.2),Vol=c(10,23),stringsAsFactors=FALSE))

library(dplyr)
library(tibble)

X <- lapply(X, column_to_rownames, "A")

答案 1 :(得分:1)

假设当您说“我想将第一列更改为rownames”时,您要使用列rownames定义A并删除列A

lapply(X, function(df) {
    #new df without rowname col
    df_out <- df[,-1]
    #set rownames as first col from input df
    rownames(df_out) <- df[[1]]
    df_out
})

如果要将列A设置为当前的rownames,则@Sotos注释中的代码可能是答案。