小编gib*_*z00的帖子

使用dplyr的条件累积和

我的数据框看起来像这样,我想要两个单独的累积列,一个用于基金A,另一个用于基金B.

Name    Event    SalesAmount   Fund    Cum-A(desired)    Cum-B(desired)
John    Webinar   NA            NA        NA               NA
John    Sale     1000           A        1000              NA
John    Sale     2000           B        1000             2000
John    Sale     3000           A        4000             2000
John    Email    NA             NA       4000             2000
Tom     Webinar   NA            NA        NA               NA
Tom     Sale     1000           A        1000              NA
Tom     Sale     2000           B        1000             2000
Tom     Sale     3000           A        4000             2000
Tom     Email    NA             NA       4000             2000

I have tried:
df<-
    df %>%
    group_by(Name)%>%  
    mutate(Cum-A = as.numeric(ifelse(Fund=="A",cumsum(SalesAmount),0)))%>%
    mutate(Cum-B = as.numeric(ifelse(Fund=="B",cumsum(SalesAmount),0))) …
Run Code Online (Sandbox Code Playgroud)

r zoo dplyr

13
推荐指数
1
解决办法
4762
查看次数

为ActivityType执行21天滚动总和的最快方法

我有一个大型数据帧(3M +行).我试图计算某个ActivityType在21天窗口中出现的次数.我已经用R中的另一个变量的Rolling Sum建模了我的解决方案.但是只需要一个ActivityType就需要很长时间.我认为3M +行不会占用过多的时间.以下是我的尝试:

dt <- read.table(text='

                         Name      ActivityType     ActivityDate                
                         John       Email            1/1/2014           
                         John       Email            1/3/2014                
                         John       Webinar          1/5/2014          
                         John       Webinar          1/20/2014          
                         John       Webinar          3/25/2014          
                         John       Email            4/1/2014           
                         John       Email            4/20/2014          
                         Tom        Email            1/1/2014           
                         Tom       Webinar           1/5/2014           
                         Tom       Webinar           1/20/2014          
                         Tom       Webinar           3/25/2014          
                         Tom       Email             4/1/2014           
                         Tom       Email             4/20/2014          

                         ', header=T, row.names = NULL)

        library(data.table)
        library(reshape2)
        dt$ActivityType <- factor(dt$ActivityType)   
        dt$ActivityDate <- as.Date(dt$ActivityDate, "%m/%d/%Y")  
        dt <- dt[order(dt$Name, dt$ActivityDate),]

   dt <- dcast(dt, Name + ActivityDate ~ ActivityType, fun.aggregate=length)
   setDT(dt)
   #Build …
Run Code Online (Sandbox Code Playgroud)

r zoo dplyr data.table

8
推荐指数
2
解决办法
419
查看次数

获取data.table中前一个组的最后一行

这就是我的数据表的样子:

library(data.table)
dt <- fread('
    Product  Group    LastProductOfPriorGroup
    A          1          NA
    B          1          NA
    C          2          B
    D          2          B
    E          2          B
    F          3          E
    G          3          E
')
Run Code Online (Sandbox Code Playgroud)

LastProductOfPriorGroup列是我想要的列.我正在尝试从前一组的最后一行获取产品.所以在前两行中,没有先前的组,因此它是NA.在第三行中,前一组1的最后一行中的产品是B.我试图通过这个来实现这个目标

dt[,LastGroupProduct:= shift(Product,1), by=shift(Group,1)]
Run Code Online (Sandbox Code Playgroud)

无济于事.

r data.table

8
推荐指数
2
解决办法
744
查看次数

计算由分号按名称分组的累积唯一因子

这就是我的数据框架的样子.最右边的两列是我想要的列.我计算每行的唯一FundTypes的累计数量.第4列是所有"ActivityType"的累积唯一计数,第5列是仅"ActivityType =="Sale"的累积唯一计数.

dt <- read.table(text='

Name      ActivityType     FundType  UniqueFunds(AllTypes) UniqueFunds(SaleOnly)         

John       Email               a            1                     0
John       Sale                a;b          2                     2 
John       Webinar             c;d          4                     2
John       Sale                b            4                     2
John       Webinar             e            5                     2
John       Conference          b;d          5                     2
John       Sale                b;e          5                     3
Tom        Email               a            1                     0
Tom        Sale                a;b          2                     2 
Tom        Webinar             c;d          4                     2
Tom        Sale                b            4                     2
Tom        Webinar             e            5                     2
Tom        Conference          b;d          5                     2
Tom        Sale                b;e;f        6                     4 …
Run Code Online (Sandbox Code Playgroud)

r zoo dplyr data.table

7
推荐指数
2
解决办法
171
查看次数

在给定日期 - 30天窗口内排名最近的学生分数

以下是我的dataframe/data.table的样子.该rank列是我想要的计算字段.

library(data.table)
df <- fread('
             Name   Score         Date              Rank
             John    42         1/1/2018              3   
             Rob     85         12/31/2017            2
             Rob     89         12/26/2017            1
             Rob     57         12/24/2017            1
             Rob     53         08/31/2017            1
             Rob     72         05/31/2017            2
             Kate    87         12/25/2017            1
             Kate    73         05/15/2017            1
             ')
df[,Date:= as.Date(Date, format="%m/%d/%Y")]
Run Code Online (Sandbox Code Playgroud)

我试图在30天窗口内的数据中计算每个学生在每个给定时间点的等级.为此,我需要在给定的时间点获取所有学生的最新分数,然后通过等级函数.

在第1行,为的1/1/2018,John已经在过去30天的窗口,两个竞争对手:罗布与最近的得分8512/31/2017和凯特与最近的得分8712/25/2017和这两个日期都落在内1/1/2018 - 30天的窗口.约翰3得分最低42.如果只有一名学生date(at a given row) - 30 day window,则排名为1. …

r rank dplyr data.table

6
推荐指数
1
解决办法
157
查看次数

使用pandas组内的多个条件检查值是否存在

以下是我的数据框的样子。Expected_Output是我想要的/目标列。

   Group  Value1  Value2  Expected_Output
0      1       3       9             True
1      1       7       6             True
2      1       9       7             True
3      2       3       8            False
4      2       8       5            False
5      2       7       6            False
Run Code Online (Sandbox Code Playgroud)

如果任何 Value1 == 7 AND如果在给定内有任何 ,那么我想返回。Value2 == 9GroupTrue

我试过无济于事:

df['Expected_Output']= df.groupby('Group').Value1.isin(7) &  df.groupby('Group').Value2.isin(9)
Run Code Online (Sandbox Code Playgroud)

注意:- 可以输出真/假或 1/0。

python numpy pandas

6
推荐指数
1
解决办法
4164
查看次数

计算当该级别更改时在给定级别上花费的时间

这就是我的数据帧的样子.最右边的列("TimeForLevelChange")是我想要的列.当给定名称的级别更改时,我想从先前级别获取最小日期,并从发生级别更改的行中取出日期并计算差异.所以在第三排,约翰的等级从1变为2,他在等级1中花了16天(2016-01-17 - 2016-01-01),然后换到等级2.

  library(data.table)
         dt <- fread('
            Name      Level     Date         RecentLevelChange TimeForLevelChange  
            John       1       2016-01-01       NA                 NA
            John       1       2016-01-10       NA                 NA
            John       2       2016-01-17       1->2               16
            John       2       2016-01-18       NA                 NA
            John       3       2016-01-22       2->3               5
            John       4       2016-01-26       3->4               4
            John       4       2016-01-27       NA                 NA
            John       7       2016-01-29       4->7               3
            Tom        1       2016-01-10       NA                NA
            Tom        2       2016-01-17       1->2              7
            Tom        2       2016-01-18       NA                NA
            Tom        3       2016-01-22       2->3              5
            Tom        4       2016-01-26       3->4              4
            Tom        4       2016-01-27 …
Run Code Online (Sandbox Code Playgroud)

r zoo dplyr data.table

5
推荐指数
1
解决办法
187
查看次数

7天前获取与约会'约'相关的分数

这就是我的数据框架的样子.最右边(第4列)是我想要的列.对于一个给定的名字,我试图从7天前得出那个人的得分.如果7天前没有确切的日期存在,那么我希望与最接近的日期相关联的分数(行的日期 - 7天).

library(data.table)
 dt <- fread('
    Name      Score     Date         ScoreAround7DaysAgo
    John       9       2016-01-01       NA
    John       6       2016-01-10       9
    John       3       2016-01-17       6
    John       5       2016-01-18       6
    Tom        9       2016-01-01       NA
    Tom        6       2016-01-10       9
    Tom        3       2016-01-17       6
    Tom        5       2016-01-18       6
                                ')
dt[, Date := as.IDate(Date)]
Run Code Online (Sandbox Code Playgroud)

我试着dt[dt,roll=7+nearest]无济于事.谢谢您的帮助.

r zoo dplyr data.table

4
推荐指数
2
解决办法
80
查看次数

逐行跟踪完整级别更改

这就是我的数据框架的样子.最右边的列("FullCycle")是我想要的列.对于给定的名称和在给定的时间点,我想看到一个人的整个水平变化周期.

 library(data.table)
     dt <- fread('
        Name      Level     Date         RecentLevelChange  FullCycle
        John       1       2016-01-01       NA                1
        John       1       2016-01-10       NA                1
        John       2       2016-01-17       1->2              1->2
        John       2       2016-01-18       NA                1->2
        John       3       2016-01-19       2->3              1->2->3
        John       4       2016-01-20       3->4              1->2->3->4
        John       4       2016-01-21       NA                1->2->3->4
        John       7       2016-01-22       4->7              1->2->3->4->7
        Tom        1       2016-01-10       NA                1
        Tom        2       2016-01-17       1->2              1->2
        Tom        2       2016-01-18       NA                1->2
        Tom        3       2016-01-19       2->3              1->2->3
        Tom        4       2016-01-20       3->4              1->2->3->4
        Tom        4       2016-01-21       NA                1->2->3->4 …
Run Code Online (Sandbox Code Playgroud)

r zoo dplyr data.table

4
推荐指数
1
解决办法
66
查看次数

使用 postgresql 设计缓慢变化的维度类型 2 脚本

假设我有以下目标表:

CREATE TABLE DimCustomer (
CustomerKey serial PRIMARY KEY,
    CustomerNum int NOT NULL,
    CustomerName varchar(25) NOT NULL,
    Planet varchar(25) NOT NULL,
    RowIsCurrent char(1) NOT NULL DEFAULT 'Y',
    RowStartDate date NOT NULL DEFAULT CURRENT_TIMESTAMP,
    RowEndDate date NOT NULL DEFAULT '12/31/9999'
);

INSERT INTO DimCustomer
(CustomerNum, CustomerName, Planet,  RowStartDate) 
VALUES (101,'Anakin Skywalker', 'Tatooine',   CURRENT_TIMESTAMP - INTERVAL '101 days'),
       (102,'Yoda', 'Coruscant',  CURRENT_TIMESTAMP - INTERVAL '100 days'),
       (103,'Obi-Wan Kenobi', 'Coruscant',  CURRENT_TIMESTAMP - INTERVAL '100 days')
Run Code Online (Sandbox Code Playgroud)

我有一个以下暂存表:

CREATE TABLE Staging_DimCustomer
(
    CustomerNum int NOT NULL, …
Run Code Online (Sandbox Code Playgroud)

sql postgresql dimensional-modeling

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

r ×8

data.table ×7

dplyr ×7

zoo ×6

dimensional-modeling ×1

numpy ×1

pandas ×1

postgresql ×1

python ×1

rank ×1

sql ×1