加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在整个数据帧中应用正则表达式而不将所有列都设置为字符

发布时间: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))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读