2017-05-14 20 views
0

我有...清單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)) 
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功能試驗,但我並沒有走得很遠......

+0

你想要的東西,像'lapply(X,函數(){A $ A < - rownames(一);一})' – Sotos

回答

1

假設您在說「要將第一列更改爲rownames」時想要定義rownamesA並刪除列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評論的代碼是一個可能的答案。

+0

或者乾脆' lapply(X,'[',-1)' – Sotos

+0

@Adam爲什麼我的代碼不工作? – user1945827

+0

@ user1945827兩個原因。 1.你的分配部分相反。您目前正在嘗試將列「A」的值賦給rownames(而不是其他方式),並且2.您必須返回數據框「a」。如果你看到我的評論,它會更清晰。 – Sotos

1

這是可能的使用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")