【问题标题】:R sorting using simple codes使用简单代码的 R 排序
【发布时间】:2015-07-04 09:11:21
【问题描述】:

有人可以帮我解决以下问题吗?

数据集示例:

Ticketid    Creation_Date   Location    Person
a1  01-02-2015  A   John
b1  03-02-2015  B   Jack
c1  03-02-2015  C   Mint
a1  03-02-2015  D   Manu
d1  03-02-2015  A   Somu
e1  03-02-2015  A   John
b1  11-02-2015  B   Jack
a1  11-02-2015  C   Mint
b1  14-02-2015  F   John
b1  27-02-2015  E   John

问题:

1.Remove重复的Ticketid就是这样过滤的 ->creationdate 小于第一次发生日期的 7 天。 例如:对于票号“a1”,有 3 个创建日期,即“01-02-2015,03-02-2015,11-02-2015”,我想要一个新列有“重复标志”和标志在这种情况下,第一次出现是 01-02-2015 为是。因为第二次发生是在第一次发生的 7 天内。

2.按上述逻辑,

                ->I want to filter by Location(Ticketid,creationdate)
                ->I want to filter by Person(Ticketid,creationdate)

代码:

t.first

如何将输出保存在同一张 excel 表中,并对有超过 1 个事件的位置/工程师进行条件格式化?

我尝试的代码太简单了,请尽快寻求帮助。提前致谢。

附加组件以更好地阐明查询:

输入:

Ticketid Creation_Date Location Person Partused deviceused

a1  01-02-2015  A   John    Monitor     Model1
b1  03-02-2015  B   Jack    Keyboard    Model2
c1  03-02-2015  C   Mint    cable       Model3
a1  03-02-2015  D   Manu    Monitor     Model1
d1  03-02-2015  A   Somu    Motherboard Model2
e1  03-02-2015  A   John    Motherboard Model2
b1  11-02-2015  B   Jack    cable       Model2
a1  11-02-2015  C   Mint    Keyboard    Model3
b1  14-02-2015  F   John    Motherboard Model1
b1  27-02-2015  E   John    Motherboard Model3

我希望我的输出格式如下:

重复标志有很多条件:目前,如果唯一的条件是第二次订单是否在第一次订单的 7 天内创建,如 a1 的情况。

每个工单 ID 的首次创建日期都不同。

Answer1:**Location  RepeatFlag  Model1  Model2  Model3**

Answer2:**Location  Person  RepeatFlag  Model1  Model2  Model3**

Answer3:**Location  PartsUsed   RepeatFlag  Model1  Model2  Model3**

注意:这只是动态变化的行的示例。因此,请分享一个满足任何类型输入的代码提示,因为我希望这是一个自动化过程,一旦数据在源(excel 表)中刷新,此报告将自动作为 excel 报告邮寄。

请说明我们如何实现自动化。

感谢提供的支持。非常感谢。

问候, VK

【问题讨论】:

  • 我已经编辑了您的 Q,以便您的数据更好地格式化 - 请阅读 StackOverflow 的格式化语言说明。
  • 谢谢先生。如果有人能投光就好了。
  • 你能发布预期的输出吗?您是否只检查每个分组变量的第一个和第二个日期之间的条件(小于 7)?
  • 您好,我已经更新了问题中的查询。

标签: r sorting date conditional-statements


【解决方案1】:

据我了解您的问题:

df <- data.frame(Ticketid = c('a1','b1','c1','a1','d1','e1','b1','a1','b1','b1'), 
Creation_Date = as.Date(c('01-02-2015','03-02-2015','03-02-2015','03-02-2015','03-02-2015','03-02-2015','11-02-2015','11-02-2015','14-02-2015','27-02-2015'), format = '%d-%m-%Y'), 
Location = c('A','B','C','D','A','A','B','C','F','E'), 
Person = c('John','Jack','Mint','Manu', 'Somu','John', 'Jack', 'Mint','John','John') )

   Ticketid Creation_Date Location Person
1        a1    2015-02-01        A   John
2        b1    2015-02-03        B   Jack
3        c1    2015-02-03        C   Mint
4        a1    2015-02-03        D   Manu
5        d1    2015-02-03        A   Somu
6        e1    2015-02-03        A   John
7        b1    2015-02-11        B   Jack
8        a1    2015-02-11        C   Mint
9        b1    2015-02-14        F   John
10       b1    2015-02-27        E   John

library(dplyr)

first_creation <- df %>% 
select(Ticketid,First_Date = Creation_Date) %>% 
group_by(Ticketid) %>% 
slice(1) %>% 
ungroup()

df2 <- merge(first_creation,df, all.y = T, by = 'Ticketid')

df3 <- df2 %>% mutate(time_diff = Creation_Date - First_Date)


df_flagged <- df3 %>% group_by(Ticketid) %>% mutate(Within_7 = ifelse(time_diff > 7 | time_diff == 0, 'NO','YES'))

    Source: local data frame [10 x 7]
Groups: Ticketid

   Ticketid First_Date Creation_Date Location Person time_diff Within_7
1        a1 2015-02-01    2015-02-01        A   John    0 days       NO
2        a1 2015-02-01    2015-02-03        D   Manu    2 days      YES
3        a1 2015-02-01    2015-02-11        C   Mint   10 days       NO
4        b1 2015-02-03    2015-02-03        B   Jack    0 days       NO
5        b1 2015-02-03    2015-02-11        B   Jack    8 days       NO
6        b1 2015-02-03    2015-02-14        F   John   11 days       NO
7        b1 2015-02-03    2015-02-27        E   John   24 days       NO
8        c1 2015-02-03    2015-02-03        C   Mint    0 days       NO
9        d1 2015-02-03    2015-02-03        A   Somu    0 days       NO
10       e1 2015-02-03    2015-02-03        A   John    0 days       NO

【讨论】:

  • 谢谢绅士,请找到更新后的查询。这确实部分解决了我的问题。
  • 处理前几行时出现以下错误。错误:找不到函数“%>%”
  • 您需要通过输入 install.packages('dplyr') 来安装包 'dplyr'
  • col.slade:此代码在巨大的数据集中使用时,我收到以下错误消息,导致 time_diff 和 inside_7 变量的输出为“NA”。我将文件读取为 csv,然后计算了这个。警告信息:在 Ops.factor(c(25L, 4L, 7L, 22L, 59L, 3L, 40L, 37L, 34L, 25L, 48L, : '-' 对因素没有意义
  • 在我安装了 library(date) 和 library(timeDate) 之后,代码工作了,但是我发现了一个新的错误,其中 timedifference 的数字很大,比如“86400”。示例:资产 First_Date SER。 Creation_Date Branch Engineer_Name time_diff Within_7 10k 03-03-2015 84901926444 04-03-2015 ND Mani 86400 NO
猜你喜欢
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
  • 2021-04-07
相关资源
最近更新 更多