Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >R:我如何在dataframe中对行进行分组,ID行满足条件,然后删除组的前几行?

R:我如何在dataframe中对行进行分组,ID行满足条件,然后删除组的前几行?
EN

Stack Overflow用户
提问于 2018-11-16 17:21:41
回答 1查看 67关注 0票数 0

我有客户的数据(用ID号标识),他们在四年中每年购买的两种产品的数量,以及新客户首次购买的年份的最后一栏(“键”栏)。问题: dataframe包含了第一次购买新客户之前的数据行。我需要删除这些行。例如,这个数据文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   customer year item.A item.B  key
1         1 2000     NA     NA         <NA>
2         1 2001     NA     NA         <NA>
3         1 2002      1      5 new.customer
4         1 2003      2      6         <NA>
5         2 2000     NA     NA         <NA>
6         2 2001     NA     NA         <NA>
7         2 2002     NA     NA         <NA>
8         2 2003      2      7 new.customer
9         3 2000      2      4         <NA>
10        3 2001      6      4         <NA>
11        3 2002      2      5         <NA>
12        3 2003      1      8         <NA>

需要像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  customer year item.A item.B key
1        1 2002      1      5 new.customer
2        1 2003      2      6         <NA>
3        2 2003      2      7 new.customer
4        3 2000      2      4         <NA>
5        3 2001      6      4         <NA>
6        3 2002      2      5         <NA>
7        3 2003      1      8         <NA>

我以为我可以使用dplyr/tidyr --组、铅/滞后和片(或者过滤器和drop_na)的组合来实现这一点,但我无法确定如何在客户组中删除符合条件“==”new.customer的行。谢谢您的建议(下面是完整数据的代码)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a<-c(1,1,1,1,2,2,2,2,3,3,3,3)
b<-c(2000,2001,2002,2003,2000,2001,2002,2003,2000,2001,2002,2003)
c<-c(NA,NA,1,2,NA,NA,NA,2,2,6,2,1)
d<-c(NA,NA,5,6,NA,NA,NA,7,4,4,5,8)
e<-c(NA,NA,"new",NA,NA,NA,NA,"new",NA,NA,NA,NA) 
df <- data.frame("customer" =a, "year" = b, "C" = c, "D" = d,"key"=e)
df    
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-16 17:30:39

作为第一步,我在键列中标记现有客户(本例中为客户3)-

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df %>% 
  group_by(customer) %>% 
  mutate(
    key = as.character(key), # can be avoided if key is a character to begin with
    key = ifelse(row_number() == 1 & (!is.na(C) | !is.na(D)), "existing", key)
  ) %>% 
  filter(cumsum(!is.na(key)) > 0) %>% 
  ungroup()

# A tibble: 7 x 5
  customer  year     C     D key     
     <dbl> <dbl> <dbl> <dbl> <chr>   
1        1  2002     1     5 new     
2        1  2003     2     6 NA      
3        2  2003     2     7 new     
4        3  2000     2     4 existing
5        3  2001     6     4 NA      
6        3  2002     2     5 NA      
7        3  2003     1     8 NA 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53347352

复制
相关文章
​Linux 打印文本部分行内容(前几行,指定行,中间几行,跨行,奇偶行,后几行,最后一行,匹配行)
打印对账文件最后一行汇总信息,通过钉钉定时发送到运维群。顺便总结下 Linux 打印文本部分行内容的各种方法。
叨叨软件测试
2020/07/13
13.6K0
我对 Twitter 前 10 行源代码的理解
过去几周,我一直在为我的家具租赁公司 Pabio 招聘一名高级全栈 JavaScript 工程师。由于是一个远程团队,面试是在 Zoom 上进行的。根据我的观察,部分开发人员不擅长现场编码或白板面试,即使他们对这项工作很在行。所以取而代之,我们会进行一小时的技术讨论,我会问他们关于 Web Vitals、可访问性、浏览器战争以及其他类似 Web 话题的问题。我很喜欢问的一个问题是:“解释一下 Twitter 源代码的前十几行”。
深度学习与Python
2022/06/11
1.1K0
我对 Twitter 前 10 行源代码的理解
spark按某几列删除dataframe重复行
想根据 id 和 lable 来删除重复行,即删掉 id=2 且 lable=2 的重复行。利用 distinct 无法删除
机器学习和大数据挖掘
2019/07/02
2.3K0
【R语言】dplyr对数据分组取各组前几行
所以在画图的时候,也需要区分这三类。下面这张表就是GO富集分析得到的结果,我们可以根据ONTOLOGY这一列来分组,就可以得到BP,CC和MF三个组。然后取每一个组的前10个条目或者前5个条目来绘制柱形图或者气泡图。
生信交流平台
2022/09/21
1.9K0
【R语言】dplyr对数据分组取各组前几行
用UtralEdit批量删除符合条件的行
在分析SUMO的路网xml文件的时候,希望导入excel之前能够先简化一下。譬如像下面这样的,我们希望去掉外面的edge属性,只留下里面的lane节点。
钱塘小甲子
2019/01/29
2K0
在pandas中遍历DataFrame行
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
用户7886150
2020/12/26
3.3K0
在Vim/Vi中删除行、多行、范围、所有行及包含模式的行
使用linux服务器,免不了和vi编辑打交道,命令行下删除数量少还好,如果删除很多,光靠删除键一点点删除真的是头痛,还好Vi有快捷的命令可以删除多行、范围。
子润先生
2021/06/24
110K0
dataframe行变换为列
使用 import org.apache.spark.sql.functions 里面的函数,具体的方式可以看 functions :
机器学习和大数据挖掘
2019/07/01
1.1K0
Linux 删除文本中的重复行
这里我做了个简单的测试,当file中的重复行不再一起的时候,uniq将服务删除所有的重复行。经过排序后,所有相同的行都在相邻,因此unqi可以正常删除重复行。
阳光岛主
2019/02/19
8.7K0
python删除行_python 删除文件中指定行
代码适用情况:xml文件,循环出现某几行,根据这几行中的某个字段删掉这几行这段代码的作用删除jenkins中config.xml中在自动生成pipline报错的时的回滚 start = ‘
全栈程序员站长
2022/09/02
3.8K0
SQL 找出分组中具有极值的行
你可能也遇到过这种需求:找出每个部门入职最早的员工的信息;获取每个科目最高分的学生信息;获取用户最近一次的完整登录信息。
白日梦想家
2020/07/20
1.8K0
SQL 找出分组中具有极值的行
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
如何遍历pandas当中dataframe的行
现在需要遍历上面DataFrame的行。对于每一行,都希望能够通过列名访问对应的元素(单元格中的值)。也就是说,需要类似如下的功能:
马哥Python
2019/06/27
4K0
datatable删除行
  1.如果只是想删除datatable中的一行,可以用DataRow的delete,但是必须要删除后让DataTable知道,所以就要用到.AcceptChanges()方法,原因是这种删除只是标识性删除,就像我们通常在数据库中用到的IsDelete字段。
全栈程序员站长
2022/07/15
2.7K0
spark dataframe操作集锦(提取前几行,合并,入库等)
spark dataframe派生于RDD类,但是提供了非常强大的数据操作功能。当然主要对类SQL的支持。
sparkexpert
2022/05/07
1.4K0
pandas dataframe删除一行或一列:drop函数
DataFrame.drop(labels=None,axis=0,index=None,columns=None, inplace=False)
哆哆Excel
2022/10/25
4.7K0
pandas dataframe删除一行或一列:drop函数
对 list 中的相同数据进行分组
同一组数据分组 需求:一个 list 里可能会有出现一个用户多条数据的情况。要把多条用户数据合并成一条。 思路:将相同的数据中可以进行确认是相同的数据,拿来做分组的 key,这样保证不会重。 实际中使用,以用户数据为例,可能用户名和身份证号是不会变的,用这两个条件拼接起来。
潇洒
2019/06/28
5.7K0
RestHighLevelClient批量删除满足某些条件的数据
这个可以通过DeleteByQueryRequest来实现,实例代码如下 /** * 批量删除文档 * @throws IOException */ @Test public void deleteByQueryRequest() throws IOException { DeleteByQueryRequest request = new DeleteByQueryRequest("sub_bank1031"); request.setDocTypes("sub_bank");
johnhuster的分享
2022/03/29
1.8K0
Mysql删除满足自己某个条件的表
问题描述: 自循环删除,大概意思就是删除一个表里的部分数据,这些数据所满足的条件也在自己表里 ,我有点儿晕,直接上代码,这是select出来的,正常流程,如果要删除直接改成delete from …就行了
诡途
2022/05/09
2.7K0
点击加载更多

相似问题

对R中满足一次条件的前几行求和

111

检查组R中的前一行是否满足条件

26

查看组R满足条件的前一行和后一行

18

删除R中满足某些条件的行

10

根据条件更新分组数据中的行和删除几行

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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