2016-12-05 4 views
2

私はここに、データフレーム で別のことで、特定の文字列を置換するには、サンプルコードです:上記を行うなぜ私の行の名前が落ちて、それを避けるのですか?

table_ex <- data.frame(row.names = c("row 1", "row 2", "row 3")) 
table_ex$year1 <- 3:1 
table_ex$year2 <- c("NaN", 5, "NaN %") 
table_ex$year3 <- c("NaN %", 7, "NaN %") 

remove_symb <- function(yolo){stringr::str_replace(yolo, 'NaN %|NaN', '')} 
table_ex <- mutate_all(table_ex, funs(remove_symb)) 

は私rownnamesを落としています。私はlapply関数を使用することができると理解していますが、私は行の名前がなぜ落とされているのだろうかと思います。 関数またはmutate_all関数のためですか?そして、どうすればそれを防ぐべきですか?

+1

'dplyr'と'データに変更することができます。 table'は行名をNULLにリセットします – akrun

+0

ありがとう@akrun、私はそれを知らなかった。私はそのために合理的なものがあるのだろうかと思っています。たぶん効率のためにDFの計算をしていますか? – Franky

+0

いくつかの属性を持つと、パフォーマンスが低下する可能性があります。 – akrun

答えて

3

行名を保持する必要がある場合は、列をループして元のデータに戻し、構造体をそのまま使用してください。[]dplyrまたはdata.tableを使用して

table_ex[] <- lapply(table_ex, remove_symb) 
table_ex 
#  year1 year2 year3 
#row 1  3    
#row 2  2  5  7 
#row 3  1    

数列に行名を変更しますが、[]で、我々はまだ、元の行名

table_ex[] <- mutate_all(table_ex, funs(remove_symb)) 
+2

それは魅力のように動作します。私は[3、]、[3]を使って行や列にアクセスできることを知っていましたが、[]を単独で使うことは考えていませんでした。ありがとうございました。 – Franky

関連する問題