gpt4 book ai didi

r - 在 mutate 函数中使用 contains()

转载 作者:行者123 更新时间:2023-12-01 22:46:55 24 4
gpt4 key购买 nike

如何使用mutatecontains 进行计算?第一个 mutate 计算给出错误:

Error: No tidyselect variables were registered
Run `rlang::last_error()` to see where the error occurred.
> rlang::last_error()
<error/rlang_error>
No tidyselect variables were registered
Backtrace:
1. dplyr::mutate(., SomeCalc = contains("pal.Length")/contains(tal.Length))
15. tidyselect::peek_vars()
17. vars_env$selected %||% abort("No tidyselect variables were registered")
18. dplyr::mutate(., SomeCalc = contains("pal.Length")/contains(tal.Length))
Run `rlang::last_trace()` to see the full context.
> rlang::last_trace()
<error/rlang_error>
No tidyselect variables were registered
Backtrace:

1. ├─iris %>% mutate(SomeCalc = contains("pal.Length")/contains(tal.Length))
2. │ ├─base::withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
3. │ └─base::eval(quote(`_fseq`(`_lhs`)), env, env)
4. │ └─base::eval(quote(`_fseq`(`_lhs`)), env, env)
5. │ └─`_fseq`(`_lhs`)
6. │ └─magrittr::freduce(value, `_function_list`)
7. │ ├─base::withVisible(function_list[[k]](value))
8. │ └─function_list[[k]](value)
9. │ ├─dplyr::mutate(., SomeCalc = contains("pal.Length")/contains(tal.Length))
10. │ └─dplyr:::mutate.data.frame(., SomeCalc = contains("pal.Length")/contains(tal.Length))
11. │ ├─base::as.data.frame(mutate(tbl_df(.data), ...))
12. │ ├─dplyr::mutate(tbl_df(.data), ...)
13. │ └─dplyr:::mutate.tbl_df(tbl_df(.data), ...)
14. │ └─dplyr:::mutate_impl(.data, dots, caller_env())
15. └─tidyselect::contains("pal.Length")
16. ├─base::tolower(vars)
17. └─tidyselect::peek_vars()
18. └─vars_env$selected %||% abort("No tidyselect variables were registered")

而第二个 mutate 函数给出了我想要的,但我必须提供整个变量名。如何只提供变量名的一部分?

数据/代码:

library(dplyr)
data(iris)
iris %>%
mutate(
SomeCalc = contains("pal.Length") / contains(tal.Length)
)


iris %>%
mutate(
SomeCalc = Sepal.Length / Petal.Length
)

编辑:

SessionInfo()

> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.3 LTS

Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1

locale:
[1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8
[4] LC_COLLATE=C.UTF-8 LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8
[7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C
[10] LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats graphics grDevices utils datasets methods base

other attached packages:
[1] dplyr_0.8.3

loaded via a namespace (and not attached):
[1] tidyselect_0.2.5 compiler_3.6.1 magrittr_1.5 assertthat_0.2.1
[5] R6_2.4.1 tools_3.6.1 pillar_1.4.2 glue_1.3.1
[9] rstudioapi_0.10 tibble_2.1.3 crayon_1.3.4 Rcpp_1.0.3
[13] pkgconfig_2.0.3 rlang_0.4.2 purrr_0.3.3

最佳答案

我们需要在select中传递一个字符串(假设只有一个匹配的列)

library(dplyr) # dev version 0.8.99.9000
iris %>%
mutate(
SomeCalc = select(., contains("pal.Length")) / select(., contains("tal.Length"))
)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species Sepal.Length
#1 5.1 3.5 1.4 0.2 setosa 3.642857
#2 4.9 3.0 1.4 0.2 setosa 3.500000
#3 4.7 3.2 1.3 0.2 setosa 3.615385
#4 4.6 3.1 1.5 0.2 setosa 3.066667
#5 5.0 3.6 1.4 0.2 setosa 3.571429
#6 5.4 3.9 1.7 0.4 setosa 3.176471
#7 4.6 3.4 1.4 0.3 setosa 3.285714
#...

使用0.8.3 dplyr,我们可以将数据集提取为向量,然后进行除法

iris %>% 
mutate(
SomeCalc = select(., contains("pal.Length"))[[1]] /
select(., contains("tal.Length"))[[1]]
)

关于r - 在 mutate 函数中使用 contains(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59912926/

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