如何在整个数据帧中应用正则表达式而不将所有列都设置为字符
发布时间:2020-12-14 05:57:23 所属栏目:百科 来源:网络整理
导读:我需要从数据框中删除“Z”: df - data.frame(Mineral = c("Zfeldspar","Zgranite","ZSilica"),Confidence = c("ZLow","High","Med"),Coverage = c("sub","sub","super"),Aspect = c("ZPos","ZUnd","Neg"),Pile1 = c(70,88,95),Pile2 = c(62,41,81)) 我用ti
我需要从数据框中删除“Z”:
df <- data.frame(Mineral = c("Zfeldspar","Zgranite","ZSilica"),Confidence = c("ZLow","High","Med"),Coverage = c("sub","sub","super"),Aspect = c("ZPos","ZUnd","Neg"),Pile1 = c(70,88,95),Pile2 = c(62,41,81)) 我用tidyverse: library(tidyverse) df <- mutate_all(df,funs(str_replace_all(.,"Z",""))) %>% mutate(PileAvg = mean(Pile1 + Pile2)) 但我得到错误 Error in mutate_impl(.data,dots) : Evaluation error: non-numeric argument to binary operator. 我做了调查,这是因为桩柱现在是字符,而不是数字.如何在不更改所有内容的情况下使用正则表达式删除“Z”?谢谢你的帮助. 解决方法
在您的df创建中,您没有设置stringsAsFactors = FALSE,因此您的字符列将自动被强制转换为因子.如果将此设置为TRUE或使用tibble或data_frame,您将获得字符colunns.
这是你使用mutate_if而不是mutate_all的地方.通过构造一个在mutate_if中使用的谓词函数,这是一种适用于因子和字符的方法. df <- data.frame(Mineral = c("Zfeldspar",81)) is_character_factor <- function(x){ is.character(x)|is.factor(x) } mutate_if(df,is_character_factor,funs(str_replace(.,""))) %>% mutate(PileAvg = mean(Pile1 + Pile2)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |