基于多个条件和字符串向量或tidyselect传递的相应变量名称,使用dplyr :: mutate创建新变量

如何解决基于多个条件和字符串向量或tidyselect传递的相应变量名称,使用dplyr :: mutate创建新变量

我很确定之前已经讨论过这个问题,但是我正在努力说明这个问题: 例如,我正在寻找此数据框...

iris %>%
    mutate(has_petal_1.4 = Petal.Length == 1.4 | Petal.Width == 1.4,width_greater_1 = Sepal.Width > 1 & Petal.Width > 1)

...无需显式命名条件中的变量。 有没有办法使用字符串向量传递变量名?不幸的是,这似乎不起作用:

varsel <- c('Petal.Length','Petal.Width')
iris %>%
  mutate(has_petal_1.4 = 1.4 %in% c(!!! syms(varsel)))

此外,我想知道mutate()函数中是否有使用tidyselect的解决方案。到目前为止,我使用了方便的new()函数来变异多个变量。是否可以将其用于条件?这是另一个不起作用的示例:

iris %>%
  mutate(has_petal_1.4 = across(c(starts_with('Petal')),function(x) {1.4 %in% x}))

我们非常感谢您的帮助。

解决方法

方法有多种,一种选择是sha1()

c_across

或者使用library(dplyr) # >= 1.0.0 iris %>% rowwise %>% mutate(has_petal_1.4 = any(c_across(varsel) == 1.4),width_greater_1 = all(c_across(ends_with('Width')) > 1)) %>% ungroup # A tibble: 150 x 7 # Sepal.Length Sepal.Width Petal.Length Petal.Width Species has_petal_1.4 width_greater_1 # <dbl> <dbl> <dbl> <dbl> <fct> <lgl> <lgl> # 1 5.1 3.5 1.4 0.2 setosa TRUE FALSE # 2 4.9 3 1.4 0.2 setosa TRUE FALSE # 3 4.7 3.2 1.3 0.2 setosa FALSE FALSE # 4 4.6 3.1 1.5 0.2 setosa FALSE FALSE # 5 5 3.6 1.4 0.2 setosa TRUE FALSE # 6 5.4 3.9 1.7 0.4 setosa FALSE FALSE # 7 4.6 3.4 1.4 0.3 setosa TRUE FALSE # 8 5 3.4 1.5 0.2 setosa FALSE FALSE # 9 4.4 2.9 1.4 0.2 setosa TRUE FALSE #10 4.9 3.1 1.5 0.1 setosa FALSE FALSE # … with 140 more rows

更快的选择
rowSums

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?