r - 在 R 中:在 data.frame 中查找每个因子低于某个阈值的值
问题描述
假设我有以下data.frame:
df = data.frame(groups =c("A","A","A","B","B","B","C","C","D","D","D","D","D"),
values =c(1,1,5,3,2,1,7,7,9,8,7,6,5))
和另一个data.frame:
df_t = data.frame(groups=c("A","B","C","D"),
threshold=c(2,5,3,9))
现在我想添加另一列来df
指示这些值是否低于分组阈值 (TRUE) 或不 (FALSE)。在这种情况下:
TRUE,TRUE,FALSE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,TRUE,TRUE,TRUE,TRUE
我知道这可以通过 for 循环轻松完成。但是,我认为必须有一种更优雅的方式来实现这一点。我也更喜欢基本 R 解决方案而不是 dplyr 或 data.table。
解决方案
考虑通过“组”加入数据集并创建列
library(dplyr)
df %>%
left_join(df_t) %>%
mutate(flag = values < threshold, threshold = NULL)
或在base R
使用match
中获取对应的索引(或 a merge
)
df$flag <- with(df, values < df_t$threshold[match(groups, df_t$groups)])
df$flag
#[1] TRUE TRUE FALSE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE
推荐阅读
- elasticsearch - 嵌套类型而不引用 Mongoosastic 中的另一个模式
- javascript - Persist dropzone files in Session storage
- c - 在 X86 计算机 (Ubuntu 16.04) 上交叉编译后执行文件无法执行并移动到 arm 板 (odroid, Ubuntu Mate 18.04)
- c# - 从另一个类调用静态函数时如何修复“不存在”?
- flask - 多对多 - 基于额外关联字段的关联对象查询
- gps - 在某些车型上,连接 CarPlay 的 CLLocation 速度高于未连接 CarPlay 的速度
- java - Spring Mapping 使用自定义映射器方法
- sql-server - 如何配置logstash以将数据从MS-SQL服务器传输到elasticsearch
- javascript - 圆点未与区域形状对齐
- reactjs - 使用 react-adal 将 Authenticator 访问令牌传递给 Web 视图