从R中的日期和类别创建新的唯一数据集

时间:2018-05-02 19:21:39

标签: r date dataframe unique categorical-data

我是R的新手,我可以使用我能得到的所有帮助!我有一个数据框,其中有OrderDate和MajorCategory作为两个变量。 OrderDates范围从2005-01-01到2007-12-31,MajorCategory从1到73运行,有大约3550万条目。每个OrderDate引用一个特定的订单,该订单具有ID号并且也归因于特定的MajorCategory。我正在尝试创建一个数据框来显示每个唯一的OrderDate以及在该日期订购的每个MajorCategory的数量。

数据集目前看起来像:

OrderDate   MajorCategory
2005-12-12  66
2005-12-12  66
2006-03-28  43
2006-05-16  66

我已使用以下方法将唯一的OrderDate(在将类更改为Date之后)分离为自己的数据框:

OD <- as.data.frame(unique(DMEFLines3Dataset2$OrderDate))
OD <- as.data.frame(sort(OD$`unique(DMEFLines3Dataset2$OrderDate)`))

我不知道如何让MajorCategory显示每个日期的计数。所以期望的输出将是这样的:

OD          MC_1    MC_2
2005-01-01  4       6
2005-01-02  7       45
2005-01-03  3       23

其中OD是订单日期,MC_X是MajorCategory每个日期的订单计数(MC_1到MC_73)。

我尝试使用for循环,频率和计数,但我似乎无法弄明白。任何帮助将非常感激:)

3 个答案:

答案 0 :(得分:0)

我不是R专家,如果给出选项,我会尝试根据需要以不同语言聚合数据,然后将聚合数据加载到R数据框中以进行任何进一步分析。

通过根据第三方天真贝叶斯模型的输出计算ROC图,我已经做了一些接近你要求的事情,该模型由按部门分组的约会细节组成。稍微调整一下我的代码,我能够获得一个数据框,其中包含按日期分组的标识符计数,这似乎是按照您要求的方式构建的。

    library(RODBC)

dbConnection <- 'Driver={SQL Server};Server=SERVERNAME;Database=DBName;Trusted_Connection=yes'
channel <- odbcDriverConnect(dbConnection)

InputDataSet <- sqlQuery(channel, "
SELECT OrderID, OrderDate, MajorCategory from [dbo].[myDataSet];"
)

results <- data.frame("date", "ordCount")
names(results) <- c("date", "ordCount")
for (dt in unique(InputDataSet$OrderDate)) {
    ordCount <- 0
    filteredSet = InputDataSet[InputDataSet$OrderDate == dt,]
    for (mc in unique(filteredSet$MajorCategory)) {
        ordCount <- ordCount+1
    }

    df <- data.frame(dt, ordCount)
    names(df) <- c("date", "ordCount")
    results <- rbind(df, results)
}


results

答案 1 :(得分:0)

据我所知你想要这样的东西:

    OrderDate<- as.Date(c('2005-12-12','2005-12-12','2006-03-28','2006-05-16','2005-03-04','2005-12-12'))
    MajorCategory<- as.numeric(c(66, 66, 43, 66, 43, 1))
    OD=data.frame(OrderDate,MajorCategory)

    out <- split(OD, OD$MajorCategory)
    count=lapply(out, function(x) aggregate(x$MajorCategory, FUN = length, by = list(x$OrderDate)))

答案 2 :(得分:0)

希望这有帮助!

  OrderDate  MC_43 MC_66 MC_67
1 2005-12-12    NA     2     1
2 2006-03-28     1    NA    NA
3 2006-05-16    NA     1    NA

输出为:

df <- structure(list(OrderDate = c("2005-12-12", "2005-12-12", "2005-12-12", 
"2006-03-28", "2006-05-16"), MajorCategory = c(66L, 66L, 67L, 
43L, 66L)), .Names = c("OrderDate", "MajorCategory"), class = "data.frame", row.names = c(NA, 
-5L))

示例数据:

<ion-list no-lines *ngFor="let list of displayList;let i=index;" (click)="checkdeadline_dt(list.DEADLINE_DT)">
<ion-item>{{list.TASKDESC}}{{list.ENTUSR }}{{list.DEADLINE_DT }}</ion-item>