2016-12-05 152 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函數,但我想知道爲什麼行名稱被刪除。是因爲str_replace函數還是函數mutate_all?我該如何預防?

+1

'dplyr'和'數據。 table'將行名重置爲NULL – akrun

+0

謝謝@akrun,我不知道這一點。我想知道什麼是理性的。在df上進行計算時可能會提高效率嗎? – Franky

+0

具有一些屬性可能會降低性能 – akrun

回答

3

如果我們需要保留行名稱,請遍歷列並將其分配回原始數據並保持結構完整,請使用[]

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

使用dplyrdata.table將改變該行名稱數字序列,但[],我們仍然可以將其更改爲原來的行名稱

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

它像一個魅力。我知道我可以使用[3,]或[,3]來訪問行或列,但我從來沒有想過單獨使用[]。謝謝。 – Franky

相關問題