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

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

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

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

代码语言:javascript
复制
   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
复制
  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
复制
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-17 01:30:39

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

代码语言:javascript
复制
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

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档