我需要从数据框中删除“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.
解决方法
在您的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))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。