gpt4 book ai didi

r - 将 mutate_at 与 mutate_if 一起使用

转载 作者:行者123 更新时间:2023-12-03 21:16:01 24 4
gpt4 key购买 nike

我正在我的包中创建一个通用函数。目标是找到百分比列,然后使用 parse_number如果他们是 character列。我一直无法使用 mutate_at 找到解决方案和 ifelse .我在下面粘贴了一个reprex。

 library(tidyverse)


df <- tibble::tribble(
~name, ~pass_percent, ~attendance_percent, ~grade,
"Jon", "90%", 0.85, "B",
"Jim", "100%", 1, "A"
)

percent_names <- df %>% select(ends_with("percent"))%>% names()


# Error due to attendance_percent already being in numeric value

if (percent_names %>% length() > 0) {
df <-
df %>%
dplyr::mutate_at(percent_names, readr::parse_number)
}
#> Error in parse_vector(x, col_number(), na = na, locale = locale, trim_ws = trim_ws): is.character(x) is not TRUE

最佳答案

您的 attendance_percent变量是数字,不是字符和 parse_number只需要字符变量,见 here .所以一个解决方案是:

edited_parse_number <- function(x, ...) {
if (mode(x) == 'numeric') {
x
} else {
parse_number(x, ...)
}
}


df %>%
dplyr::mutate_at(vars(percent_names), edited_parse_number)

# name pass_percent attendance_percent grade
# <chr> <dbl> <dbl> <chr>
#1 Jon 90 0.85 B
#2 Jim 100 1 A

或者

如果您不想使用该额外函数,请在开始时提取字符变量:
percent_names <- df %>% 
select(ends_with("percent")) %>%
select_if(is.character) %>%
names()
percent_names
# [1] "pass_percent"


df %>%
dplyr::mutate_at(vars(percent_names), parse_number)
# name pass_percent attendance_percent grade
# <chr> <dbl> <dbl> <chr>
# 1 Jon 90 0.85 B
# 2 Jim 100 1 A

关于r - 将 mutate_at 与 mutate_if 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60638968/

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