2016-12-05 32 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

相关问题