Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用dplyr使用条件语句对分组数据进行筛选?

如何使用dplyr使用条件语句对分组数据进行筛选?
EN

Stack Overflow用户
提问于 2020-03-28 18:17:32
回答 3查看 334关注 0票数 2

我想使用条件使用dplyr过滤数据。我想测试的条件是国家年组合是否有两个版本。

代码语言:javascript
运行
AI代码解释
复制
df <- data.frame(country = c("country1", "country2", "country1", "country2", "country3"), year = rep(2011,5), version = c("versionA", "versionA", "versionB", "versionB", "versionB"))

以下是我在看完here之后所做的尝试

代码语言:javascript
运行
AI代码解释
复制
df %>%
     group_by(country, year) %>%
     {if unique(version)==1 . else filter(version == "versionA")}

我希望得到的是如下所示的数据:

代码语言:javascript
运行
AI代码解释
复制
country     year     version

country1    2011     versionA
country2    2011     versionA
country3    2011     versionB
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-03-28 18:26:05

要计算唯一值的数量,我们可以使用n_distinct并在此基础上筛选行。

代码语言:javascript
运行
AI代码解释
复制
library(dplyr)

df %>%
  group_by(country, year) %>%
  filter(if(n_distinct(version) == 2) version == 'versionA' else TRUE)


#  country   year version 
#  <fct>    <dbl> <fct>   
#1 country1  2011 versionA
#2 country2  2011 versionA
#3 country3  2011 versionB
票数 2
EN

Stack Overflow用户

发布于 2020-03-28 18:21:31

在按'country‘、'year’分组之后,如果不同元素的数量大于1,则返回'versionA',否则返回第一个元素

代码语言:javascript
运行
AI代码解释
复制
library(dplyr)
df %>%
  group_by(country, year)  %>% 
  filter((n_distinct(version)  > 1 & version == 'versionA')|row_number() == 1)
# A tibble: 3 x 3
# Groups:   country, year [3]
#  country   year version 
#  <fct>    <dbl> <fct>   
#1 country1  2011 versionA
#2 country2  2011 versionA
#3 country3  2011 versionB

也可以将其添加到if/else

代码语言:javascript
运行
AI代码解释
复制
df %>%
    group_by(country, year) %>%
    filter(if(n_distinct(version) > 1) version == 'versionA'
       else row_number() ==1)
# A tibble: 3 x 3
# Groups:   country, year [3]
#  country   year version 
#  <fct>    <dbl> <fct>   
#1 country1  2011 versionA
#2 country2  2011 versionA
#3 country3  2011 versionB

或者另一个选择是arrange

代码语言:javascript
运行
AI代码解释
复制
df %>% 
    arrange(country, year, version != 'versionA') %>% 
    group_by(country, year) %>% 
    slice(1)

或使用summarize

代码语言:javascript
运行
AI代码解释
复制
df %>%
    group_by(country, year) %>%
    summarise(version = if(n_distinct(version) > 1) 'versionA' else first(version))

或者使用data.table

代码语言:javascript
运行
AI代码解释
复制
library(data.table)
setDT(df)[, .SD[if(n_distinct(version) > 1) version == 'versionA' 
          else 1], .(country, year)]
票数 1
EN

Stack Overflow用户

发布于 2020-03-28 19:39:07

基数R-一行谢谢(@akrun):

代码语言:javascript
运行
AI代码解释
复制
df[!(duplicated(df[1:2])),]

基数R单线:

代码语言:javascript
运行
AI代码解释
复制
df[!(duplicated(df$country, df$year)),]

Tidyverse解决方案:

代码语言:javascript
运行
AI代码解释
复制
library(tidyverse)
df %>%
  filter(!(duplicated(country, year)))

一个更通用的R基解决方案:

代码语言:javascript
运行
AI代码解释
复制
# Create a counter of versions for each year and country: 

df$tmp <- with(lapply(df, function(x){if(is.factor(x)){as.character(x)}else{x}}),
               ave(version, paste0(country, year), FUN = seq.int))

# Subset the dataframe to hold only the first record for each year/country: 

df[which(df$tmp == 1), ]

一种更通用的tidyverse解决方案:

代码语言:javascript
运行
AI代码解释
复制
df %>%
  arrange(version) %>% 
  filter(!(duplicated(country, year)))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60909423

复制
相关文章
使用dplyr进行数据转换
dplyr最常用的5个函数: • 按值筛选观测(filter())。 • 对行进行重新排序(arrange())。 • 按名称选取变量(select())。 • 使用现有变量的函数创建新变量(mutate())。 • 将多个值总结为一个摘要统计量(summarize())。 函数的使用方法: (1) 第一个参数是一个数据框。 (2) 随后的参数使用变量名称(不带引号)描述了在数据框上进行的操作。 (3) 输出结果是一个新数据框。
生信编程日常
2020/04/01
9910
java小技能:对list集合根据条件进行分组、过滤和字段筛选
需求:修改代理商角色权限时,判断是否存在权限被移除,如果存在,则穿透删除所有下级代理商相对应的权限值。
公众号iOS逆向
2022/12/19
6.3K0
java小技能:对list集合根据条件进行分组、过滤和字段筛选
使用SnpSift filter对VCF文件进行筛选
当完成突变位点注释之后,我们会得到一个巨大的VCF文件,文件大小从几十M到几十G不等。在数量如此多的突变位点中,我们只会根据注释结果从中挑选部分感兴趣的突变位点,这就要求对VCF文件进行过滤。如此大的文件用Excel 操作是不现实的,脚本语言处理大文件时效果也不尽人意,所以SnpEff的开发团队专门开发了一款工具,叫做SnpSift, 用来对VCF文件进行过滤。
生信修炼手册
2020/05/11
3.1K0
如何使用EvtMute对Windows事件日志进行筛选过滤
在这篇文章中,我们将告诉大家如何使用EvtMute来对Windows事件日志进行筛选过滤。EvtMute这款工具允许我们使用YARA来进行攻击性操作,并对已经报告给Windows事件日志的事件进行过滤和筛选。
FB客服
2021/03/09
9250
如何使用EvtMute对Windows事件日志进行筛选过滤
数据库按条件查询语句_sql多条件筛选语句
在SQL中,insert、update、delete和select后面都能带where子句,用于插入、修改、删除或查询指定条件的记录
全栈程序员站长
2022/10/03
4K0
数据库按条件查询语句_sql多条件筛选语句
使用SQL语句如何实现条件判断
客户需求是咨询如何用SQL结合decode函数实现条件判断,比如当某一列数值大于500,对应类型“大于500”;当某一列数值小于500,对应类型“小于500”。 实际decode函数无法实现这个功能,实现要用到case when,为此我构造一个简单的示例来直观演示:
Alfred Zhao
2019/05/24
2.4K0
R语言︱数据集分组、筛选(plit – apply – combine模式、dplyr、data.table)
大型数据集通常是高度结构化的,结构使得我们可以按不同的方式分组,有时候我们需要关注单个组的数据片断,有时需要聚合不同组内的信息,并相互比较。
悟乙己
2019/05/28
20.9K0
使用 QueryBuilder 构造复杂的数据筛选语句
QueryBuilder 是一个常用的过滤器的 UI 组件,本文从前后端和数据库查询的角度总结了一些使用经验,包括一些踩坑的心得。
windseeker
2021/12/01
6.9K0
使用 QueryBuilder 构造复杂的数据筛选语句
sql对多个条件进行分组求和_分组求和法例题附答案
大家好,又见面了,我是你们的朋友全栈君。 在ireport中实现分组,求和。效果如下 name total A 2 A 3 subtotal 5 B 4 B 5 subtotal 9 添加Document–>Variables–>Variable Name 建立自定义的求和函数 设置相关属性。 Calculation 设置为sum reset type为report Reset group 选择自己创建的分组。 increment type 为Group Variable Expression填写你要累计的对象表达式。 new Integer($F{rxNo}) Initial Value Expression处填写数据类型的初始化对象。 new java.lang.Integer(0)
全栈程序员站长
2022/10/03
2.8K0
使用FILTER函数筛选满足多个条件的数据
其中,参数数组,是想要筛选的数据,可以是单元格区域或者数组。参数包括,指定筛选的条件,应返回TRUE,以便将其包含在查询中。参数是否为空,如果没有满足筛选条件的结果,则可以给该参数指定要返回的内容,可选。
fanjy
2023/09/15
3.7K0
使用FILTER函数筛选满足多个条件的数据
使用dplyr进行数据分析:入门篇
tidyverse系列应该算是R语言数据分析中的瑞士军刀了,统一的格式,简洁的代码,管道符便于阅读的形式,都能让大家快速上手。R数据科学就是专门讲这个系列的,但是对于很多函数的用法和细节问题,都没有说,所以在使用时还是会经常遇到各种问题。
医学和生信笔记
2022/11/14
1.5K0
Power Pivot中筛选条件的使用
在Power Pivot中,在大部分时间里,筛选是作为一个主要的功能运用到各个地方,筛选上下文,行上下文都和筛选相关。
逍遥之
2020/03/23
4.9K0
使用Evaluate方法筛选数据——基于两个条件
中,我们讨论了不使用筛选器而筛选数据的方法技巧,它可以替代自动筛选方法。这里我们进一步以示例扩展这个技巧。
fanjy
2022/11/16
1.5K0
使用Evaluate方法筛选数据——基于两个条件
使用 Python 对相似索引元素上的记录进行分组
在 Python 中,可以使用 pandas 和 numpy 等库对类似索引元素上的记录进行分组,这些库提供了多个函数来执行分组。基于相似索引元素的记录分组用于数据分析和操作。在本文中,我们将了解并实现各种方法对相似索引元素上的记录进行分组。
很酷的站长
2023/08/11
3010
使用 Python 对相似索引元素上的记录进行分组
dplyr强大的分组汇总
在现实生活中我们经常会遇到非常多需要分组汇总的情况,单个的汇总价值不大,只有分组之后,才能看出差异,才能表现出数据的价值。
医学和生信笔记
2022/11/15
1.8K0
如何使用Python对Instagram进行数据分析?
我写此文的目的在于展示以编程的方式使用Instagram的基本方法。我的方法可用于数据分析、计算机视觉以及任何你所能想到的酷炫项目中。 Instagram是最大的图片分享社交媒体平台,每月活跃用户约五亿,每日有九千五百万的图片和视频被上传到Instagram。其数据规模巨大,具有很大的潜能。本文将给出如何将Instagram作为数据源而非一个平台,并介绍在项目中使用本文所给出的开发方法。 API和工具简介 Instagram提供了官方API,但是这些API有些过时,并且当前所提供的功能也非常有限。因此在
小莹莹
2018/04/24
2.8K0
如何使用Python对Instagram进行数据分析?
对 list 中的相同数据进行分组
同一组数据分组 需求:一个 list 里可能会有出现一个用户多条数据的情况。要把多条用户数据合并成一条。 思路:将相同的数据中可以进行确认是相同的数据,拿来做分组的 key,这样保证不会重。 实际中使用,以用户数据为例,可能用户名和身份证号是不会变的,用这两个条件拼接起来。
潇洒
2019/06/28
5.8K0
如何使用cdn对网站进行加速
今天抽空整理下网站,时间太久,历史文件太多,删除了一些无用的垃圾,更换了服务器,调整了cdn,鼓捣2天,更换好目前感觉良好。
霍常亮
2020/07/19
17K0
如何使用cdn对网站进行加速
使用 Python 对相似的开始和结束字符单词进行分组
在 Python 中,我们可以使用字典和循环等方法、利用正则表达式和实现列表推导等方法对具有相似统计和结束字符的单词进行分组。该任务涉及分析单词集合并识别共享共同开始和结束字符的单词组。这在各种自然语言处理应用程序中可能是一种有用的技术,例如文本分类、信息检索和拼写检查。在本文中,我们将探讨这些方法,以在 Python 中对相似的开始和结束字符单词进行分组。
很酷的站长
2023/08/11
1890
使用 Python 对相似的开始和结束字符单词进行分组
点击加载更多

相似问题

使用if语句和条件进行筛选: dplyr管道

14

使用dplyr对组织结构进行分组和筛选

15

使用dplyr和语句进行筛选

11

使用dplyr进行分组和筛选数据管理

22

使用dplyr使用测试条件进行r-筛选数据

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文