如何在R的mutate中避免重复列名,单次完成多步列操作?
同一列多步mutate的简化写法
你可以在单次mutate调用里完成对同一列的多步处理,不用重复书写列名,推荐两种实用方式:
方式一:函数嵌套调用
直接将多个操作函数依次嵌套,让每一步的结果作为下一个函数的输入,仅需给目标列赋值一次:
df <- data.frame( c1 = c("Élève", "Café", "Château", "Noël", "Crème") ) df2 <- df %>% mutate(c1 = iconv(toupper(gsub("\\\"", "", gsub("\\s+", " ", trimws(c1)))), to = "ASCII//TRANSLIT"))
方式二:列内链式管道(可读性更强)
利用%>%在列的赋值逻辑内链式调用函数,用.指代当前处理的结果,逻辑和分步mutate完全一致,但结构更简洁清晰:
df <- data.frame( c1 = c("Élève", "Café", "Château", "Noël", "Crème") ) df2 <- df %>% mutate( c1 = c1 %>% trimws() %>% gsub("\\s+", " ", .) %>% gsub("\\\"", "", .) %>% toupper() %>% iconv(to = "ASCII//TRANSLIT") )
两种方法最终得到的df2和你原来分步调用mutate的结果完全相同,可根据自己的阅读习惯选择。
内容的提问来源于stack exchange,提问作者dia05
相关产品推荐
相关产品推荐

