查找与R中的另一列重复的列值

时间:2016-07-31 21:27:22

标签: r select dataframe

我有一个销售数据框,其中我的日期为1列,至少3年,CustomerId,交易和交易金额。

       Date   Cust.ID     Transact.Amt
12-Aug-2013         1              64
12-Aug-2014         1             154
15-Dec-2013         2              85
17-Dec-2013         1             135

我正在尝试检索已购买超过2年的Cust.ID,在这种情况下会是1?

我尝试使用重复功能,但它删除了原始值。

我真的是在R开始,如果有人分享他们的方法,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

这是一个使用table查看每个客户每年交易的次数,并检查每个客户实际交易的年数并指定您希望为每个客户检查的阈值的选项:

library(lubridate)
tab <- table(df$Cust.ID, year(dmy(df$Date)))
tab
#   2013 2014
# 1    2    1
# 2    1    0

rowSums(tab != 0) >= 2
#    1     2 
# TRUE FALSE 

另一个dplyr选项:

library(dplyr); library(lubridate)
df %>% 
      group_by(Cust.ID) %>% 
      summarise(n_years = n_distinct(year(dmy(Date)))) %>% 
      filter(n_years >= 2)

# A tibble: 1 x 2
#  Cust.ID n_years
#    <chr>   <int>
#1       1       2
原始数据框子集的

更新

df %>% 
      group_by(Cust.ID) %>% 
      filter(n_distinct(year(dmy(Date))) >= 2)

#Source: local data frame [3 x 3]
#Groups: Cust.ID [1]

#          Date Cust.ID Transact.Amt
#         <chr>   <chr>        <chr>
# 1 12-Aug-2013       1           64
# 2 12-Aug-2014       1          154
# 3 17-Dec-2013       1          135

答案 1 :(得分:0)

我们可以使用data.table。转换&#39; data.frame&#39;到&#39; data.table&#39; (setDT(df)),按&#39; Cust.ID&#39;分组,我们将&#39;日期&#39;到Date课程,提取“年”&#39; if unique个元素的长度大于1,我们得到Data.table的子集。

library(data.table)
setDT(df)[, if(uniqueN(format(as.Date(Date, "%d-%b-%Y"), "%Y"))>1) .SD, by = Cust.ID]
#   Cust.ID        Date Transact.Amt
#1:       1 12-Aug-2013           64
#2:       1 12-Aug-2014          154
#3:       1 17-Dec-2013          135