r - R中跨多个列的简洁子集
问题描述
假设我有一个庞大的数据框,并且在多个列中,我有一个非常大的唯一代码列表,我想使用这些代码来选择某些行来子集原始数据框。大约有 1000 个代码,我希望所有代码都遵循。例如,我有大约 30 列包含代码,我只想在这些列中的任何一个中获取代码为 100 到 120 的行。
要做到这一点还有很长的路要走,就像
new_dat <- df[which(df$codes==100 | df$codes==101 | df$codes1==100
我对每个可能包含这些代码的列的每个可能的代码重复此操作。有没有办法以更方便的方式做到这一点?
我想尝试用dplyr
'sselect
函数解决这个问题,但我无法确定它是否适用于我的情况
获取iris
数据集
假设我想要在列名中包含单词 Sepal 的任何列中包含值 4.0-5.0 的所有行。
#this only goes for 4.0
brand_new_df <- select(filter(iris, Sepal.Length ==4.0 | Sepal.Width == 4.0))
但我想要的是
brand_new_df <- select(filter(iris, contains(Sepal) == 4.0:5.0))
有没有 dplyr 方法可以做到这一点?
解决方案
across()
@RonakShah 回答的相应版本:
library(dplyr)
iris %>% filter(rowSums(across(contains('Sepal'), ~ between(., 4, 5))) > 0)
或者
iris %>% filter(rowSums(across(contains('Sepal'), between, 4, 5)) > 0)
来自vignette("colwise")
:
以前,与和助手
filter()
配对。现在,相当于,并且没有直接替代.all_vars()
any_vars()
across()
all_vars()
any_vars()
所以你需要类似的东西rowSums(...) > 0
来实现any_vars()
.
推荐阅读
- python - 如何将熊猫数据框列中的两种不同日期格式转换为相同格式?
- php - 获取帖子缩略图 URL 并分配给变量
- node.js - nodejs中的多个Promise等到它们全部完成
- c - 已解决的睡眠方法将程序线程挂在 C pthreads 中(竞争条件,它与睡眠无关)
- python - wxpython绑定windows toast通知处理程序的问题
- python - python上有动态类型吗?
- java - 片段不会出现在 Android 中
- javascript - 用这个。在函数中 在函数中
- python - 如何让 Python 脚本在连接到 Node.JS 服务器的后台持续运行
- c++ - 如何在没有冗余计算的 if 语句中使用 std::valarray?