我想跨多个列应用一个函数,这些列的列名中包含特定的字符串.以下命令已停止工作.关于代码的问题有什么建议吗?

数据:

> df=data.frame(ab=1:5, ba=6:10, c=11:15, dc=16:20)
> df
  ab ba  c dc
1  1  6 11 16
2  2  7 12 17
3  3  8 13 18
4  4  9 14 19
5  5 10 15 20

try :

> df %>% dplyr::mutate_at(vars(contains("a"), contains("b")), funs(sqrt(.)))

Error: `.vars` must be a character/numeric vector or a `vars()` object, not a `data.frame` object.
Backtrace:
  9. dplyr::mutate_at(., vars(contains("a"), contains("b")), funs(sqrt(.)))
 10. dplyr:::manip_at(...)
 11. dplyr:::tbl_at_syms(.tbl, .vars, .include_group_vars = .include_group_vars)
 12. dplyr:::tbl_at_vars(tbl, vars, .include_group_vars = .include_group_vars)
 13. dplyr:::bad_args(...)
 14. dplyr:::glubort(fmt_args(args), ..., .envir = .envir)

推荐答案

使用matches

library(dplyr)
df %>%
   mutate_at(vars(matches('a', 'b')), sqrt)

或者如文档所述,将match指定为字符向量

匹配-字符向量.如果长度大于;1、比赛的联合被采用.

df %>%
    mutate_at(vars(contains(match = c('a', 'b'))), sqrt)
        ab       ba  c dc
1 1.000000 2.449490 11 16
2 1.414214 2.645751 12 17
3 1.732051 2.828427 13 18
4 2.000000 3.000000 14 19
5 2.236068 3.162278 15 20

_at/_all人被否决,而across人被否决

df %>% 
   mutate(across(matches('a', 'b'), sqrt))

-输出

        ab       ba  c dc
1 1.000000 2.449490 11 16
2 1.414214 2.645751 12 17
3 1.732051 2.828427 13 18
4 2.000000 3.000000 14 19
5 2.236068 3.162278 15 20

R相关问答推荐

基于shiny 应用程序中的日期范围子集xts索引

名称输出pmap on tible

隐藏e_mark_line的工具提示

迭代通过1个长度的字符串长字符R

我想在R中总结一个巨大的数据框架,使我只需要唯一的lat、lon、Date(Year)和Maxium Value""""""""

gganimate在使用shadow_mark选项时不保留所有过go 的标记

是否可以创建一个ggplot与整洁判断的交互作用

条形图和在Ploly中悬停的问题

R—将各种CSV数字列转换为日期

矩阵的堆叠条形图,条形图上有数字作为标签

如何写商,水平线,在一个单元格的表在R

使用rest从header(h2,h3,table)提取分层信息

将多个变量组合成宽格式

从线的交点创建面

创建新列,其中S列的值取决于该行S值是否与其他行冗余

如何将EC50值绘制在R中的剂量-react 曲线上?

如何捕获这个shiny 的、可扩展的react 性用户输入矩阵作为另一个react 性对象,以便进一步操作?

通过不完全重叠的多个柱连接

如何在R曲线图弹出窗口中更改r和theta标签

在shiny /bslb中,当卡片是从json生成时,如何水平排列卡片?