r - 重命名不包括特定列集的列
问题描述
如果列名不包含在名为untouch_vars
.
在查看了 的帮助页面后rename_at
,我尝试了以下代码行:
data("iris")
untouch_vars <- c("Sepal.Length", "Species", "Foo", "Fii")
iris %>%
rename_at(vars(-untouch_vars), ~str_c("HEY_", .))
但它不起作用,因为Foo
并且Fii
不存在于iris
数据集中。事实上,我收到以下错误:
Error: Unknown columns `Foo` and `Fii`
Call `rlang::last_error()` to see a backtrace
由于我有多个数据集,并且我不想为每个数据集创建一个包含待排除变量的自定义向量,有没有办法实现我的意图?
解决方案
我们可以使用one_of
iris %>%
rename_at(vars(-one_of(untouch_vars)), ~ str_c("HEY_", .)) %>%
head(2)
# Sepal.Length HEY_Sepal.Width HEY_Petal.Length HEY_Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa
会有未知列 'foo', 'Fii' 的警告信息
或与setdiff
iris %>%
rename_at(vars(setdiff(names(.), untouch_vars)), ~str_c("HEY_", .))
不会有任何警告
推荐阅读
- swift - 由于自定义 CNSocialProfile 服务名称,VCF 在 imessage 中崩溃?
- swift - 将应用程序置于后台后 3 分钟后套接字关闭
- javascript - 在 PHP Laravel 中解析和循环对象的 javascript 数组
- c# - Xamarin Forms Android 离开全屏视频
- c++ - 为什么 std::basic_string_view 只支持 const 指针?
- node.js - 在 Ubuntu 18.04 中安装套接字
- python - 将 tensorflow 1.xx 模型加载到 tensorflow 2.xx
- r - 从 R Shiny 中的 DataTable 按钮扩展中动态命名下载文件名
- import - Sqoop 导入不适用于蜂巢镶木地板
- c++ - 如何为可变参数模板子生成元组?