2017-05-14 9 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への最初の列を変更したいです。

私は

...私はmapply機能の実験を始めたが、私は非常に遠く取得していない...、

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

が、これは動作しませんが明白なことを試してみました

+0

を使用して可能である(X、機能(A){$ A < - rownames(A)を、A})' – Sotos

答えて

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 
}) 

あなたが現在rownamesに列Aを設定したい場合は、@Sotosコメント内のコードは、可能な答えです。

+0

それとも単に ' lapply(X、 '['、-1) ' – Sotos

+0

@Adamなぜ私のコードは動作しませんでしたか? – user1945827

+0

@ user1945827 2つの理由。あなたは割当部分を逆にしました。現在、 'A'列の値をrownamesに割り当てようとしています(それ以外の方法ではなく)。2.データフレーム' a'を返す必要があります。あなたが私のコメントを見るなら、それはより明確になります。 – Sotos

1

これは、あなたが `lapplyような何かしたい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")