如何解决如何在 R 中使用分组事务创建新数据框?
我正在尝试使用交易中购买的项目的现有数据框在 R 中创建一个新的数据框,如下所示:
数据的dput输出:
structure(list(Transaction = c(1L,2L,3L,3L),Item = c("Bread","Scandinavian","Hot chocolate","Jam","Cookies"
),date_time = c("30/10/2016 09:58","30/10/2016 10:05","30/10/2016 10:07","30/10/2016 10:07"),period_day = c("morning","morning","morning"),weekday_weekend = c("weekend","weekend","weekend"),Year = c("2016","2016","2016"),Month = c("October","October","October")),row.names = c(NA,6L),class = "data.frame")
正如您在示例中看到的,这些行是由于购买的每个单独的产品,而不是交易本身(因此交易 2 既是第 2 行又是第 3 行)。
我想创建一个新表,其中行是不同的事务(1、2、3 等),不同的列是分类的(面包 = 0、1),以便我可以执行先验分析。>
知道如何将不同的交易组合在一起,然后创建这些新列吗?
解决方法
试试 fastDummies 包中的 dummy_cols。这会将项目列变成 0 和 1。第二行是每笔交易的总和。
d <- dummy_cols(data[1:2],remove_selected_column=T)
d <- aggregate(d[-1],by=list(Transaction=d$Transaction),FUN=sum)
,
假设您的数据框名为 df
,您可以使用 tidyr
的 pivot_wider
:
df1 <- tidyr::pivot_wider(df,names_from = Item,values_from = Item,values_fn = n_distinct,values_fill = 0)
df1
# Transaction date_time period_day weekday_weekend Year Month Bread Scandinavian `Hot chocolate` Jam Cookies
# <int> <chr> <chr> <chr> <chr> <chr> <int> <int> <int> <int> <int>
#1 1 30/10/2016 09… morning weekend 2016 Octob… 1 0 0 0 0
#2 2 30/10/2016 10… morning weekend 2016 Octob… 0 1 0 0 0
#3 3 30/10/2016 10… morning weekend 2016 Octob… 0 0 1 1 1
或者使用 data.table 的 dcast
:
library(data.table)
dcast(setDT(df),Transaction+date_time+period_day + weekday_weekend +
Year + Month ~ Item,value.var = 'Item',fun.aggregate = uniqueN)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。