使用dplyr批量转换多列数据报错求助:as_dictionary()已废弃
解决dplyr多列转换的报错问题
这个问题我太熟悉了!你遇到的报错是因为dplyr和rlang包更新后,旧的语法被淘汰了——funs()函数已经正式弃用,再加上mutate_all的写法也有了更标准的替代方案,才导致了这个as_dictionary()相关的错误。我给你两种靠谱的修改方案,都能完美解决问题:
方案1:修改原有mutate_all的写法(快速适配)
把原来的funs()换成匿名函数的~写法,这是dplyr更新后兼容旧逻辑的简单修改:
library(dplyr) df <- data.frame( w1 = c("NN1", "NN0", "AJ0", "AJC", "NP0", "VVZ"), w2 = c("NN0", "NN2", "AJC", "NN0", "VBN", "NN1"), w3 = c("AJ0", "NN2", "NP0", "VVG", "AJS", "NN1"), w4 = c("NN2", "NN2", "AJ0", "AJ0", "AJS", "VVD") ) # 修改后的代码 df %>% mutate_all(~case_when( grepl("^N", .) ~ "noun", grepl("^V", .) ~ "verb", grepl("^A", .) ~ "adjective", TRUE ~ "Other" ))
方案2:用dplyr推荐的across()语法(更持久的写法)
mutate_all现在已经被软废弃,未来版本可能会移除,所以更推荐使用mutate(across())的新语法,它也更灵活(比如后续要指定特定列处理时,改起来更方便):
# 推荐的新写法 df %>% mutate(across(everything(), ~case_when( grepl("^N", .) ~ "noun", grepl("^V", .) ~ "verb", grepl("^A", .) ~ "adjective", TRUE ~ "Other" )))
两种方案运行后都会得到同样的结果:
w1 w2 w3 w4 1 noun noun adjective noun 2 noun noun noun noun 3 adjective adjective noun adjective 4 adjective noun verb adjective 5 noun verb adjective adjective 6 verb noun noun verb
内容的提问来源于stack exchange,提问作者Chris Ruehlemann
相关产品推荐
相关产品推荐

