gpt4 book ai didi

r - 如何在不使所有列都变为字符的情况下在整个数据帧上应用正则表达式

转载 作者:行者123 更新时间:2023-12-04 11:41:05 25 4
gpt4 key购买 nike

我需要从数据框中删除“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.

我做了调查,这是因为 Pile 列现在是字符,而不是数字。如何在不更改所有内容的情况下使用正则表达式删除“Z”?谢谢你的帮助。

最佳答案

在您的 df创建,你没有设置stringsAsFactors = FALSE因此您的字符列将自动强制为因子。如果您将其设置为 TRUE或使用 tibbledata_frame你会得到字符colunns。

这是您使用 mutate_if 的地方而不是 mutate_all .这是一种对因子和字符都适用的方法,通过构造一个谓词函数在 mutate_if 中使用。 .

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))

is_character_factor <- function(x){

is.character(x)|is.factor(x)

}

mutate_if(df, is_character_factor, funs(str_replace(., "Z", ""))) %>%
mutate(PileAvg = mean(Pile1 + Pile2))

关于r - 如何在不使所有列都变为字符的情况下在整个数据帧上应用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49946206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com