r - dplyr::rename() if condition about column contents is met
问题描述
Say I wanted to rename a column based on the condition that the contents of the column contain a specific value.
For example, if iris$Species
contains "virginica", rename to Species
to flower.name
, else keep the name as Species
.
This code works:
library(dplyr)
iris <- if("virginica" %in% iris$Species){
rename(iris, flower.name = Species)
}
iris %>% names
but I was hoping their was a more elegant dplyr way of doing this with one of the existing functions, such as rename_if()?
解决方案
一种选择可能是:
iris %>%
rename_with(~ "Flower.Name",
.cols = Species & where(~ any(. %in% "virginica")))
Sepal.Length Sepal.Width Petal.Length Petal.Width Flower.Name
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
8 5.0 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
10 4.9 3.1 1.5 0.1 setosa
推荐阅读
- java - 在后台启动服务时类引用 null
- arrays - 注入安全的 Postgres 批量插入/更新。也许是一个需要数组的函数?
- intellij-idea - 安装 IntelliJ IDEA 后从控制台运行一个简单的 hello world
- python - DataFrame 上的 Scipy 最小化优化逐行
- tensorflow - 如何使用 Tensorflow 或 GBM 调整模型以获得罕见的二元结果
- java - 面向 Web 开发人员的 Eclipse Java EE IDE。Mars.2 Release (4.5.2) 和应用服务器 IBM WebSphere 问题
- python - 运行 Flask 单线程
- automapper - Automapper 8.1.1 在更新到 Abp 4.8.1 后使用反射不起作用
- python-2.7 - 为什么数据会跨请求保留?
- node.js - 2019年Node.JS进程之间如何通信