使用 R 进行数据操作
Data Manipulation with R
我有一个问题,我发现自己没有及时解决。真的很感谢任何帮助,因为我认为这里的一些专业人士只是几行代码。
我的数据包含超过 2 mio。行交易。我想对数据做一些关联规则。
我只对涉及产品 (P_ID) "PANDORA" 并且我认识客户 (c_ID) 的交易 (t_ID) 感兴趣。我举了个例子:
> T_ID <- c(10,10,10,11,12,13,13)
> P_ID <- c("PANDORA", "Others", "Pan","PANDORA","Ham", "PANDORA","Ham")
> c_ID <- c(1,1,1,2,-1,4,4)
> basket <- data.frame(T_ID,P_ID,c_ID)
> basket
T_ID P_ID c_ID
1 10 PANDORA 1
2 10 Others 1
3 10 Pan 1
4 11 PANDORA 2
5 12 Ham -1
6 13 PANDORA 4
7 13 Ham 4
事务 10 包含产品 "Pandora",因此所有 3 行都应保留在数据集中。虽然事务 12 没有附加客户,但需要将其删除。
我最纠结的部分是如何保留与包含 "PANDORA" 的同一交易 ID 相关但存储了另一个产品的交易行。
非常感谢任何帮助,
此致,
克里斯蒂安
也许这有帮助:
keep_IDs <- basket$T_ID[with(basket, P_ID=="PANDORA" & c_ID!=-1)]
basket[basket$T_ID %in% keep_IDs,]
# T_ID P_ID c_ID
#1 10 PANDORA 1
#2 10 Others 1
#3 10 Pan 1
#4 11 PANDORA 2
#6 13 PANDORA 4
#7 13 Ham 4
数据
basket <- structure(list(T_ID = c(10L, 10L, 10L, 11L, 12L, 13L, 13L, 14L, 14L),
P_ID = structure(c(6L, 4L, 5L, 6L, 1L, 6L, 1L, 3L, 2L),
.Label = c("Ham","Honey", "Nugget", "Others", "Pan", "PANDORA"), class = "factor"),
c_ID = c(1L, 1L, 1L, 2L, -1L, 4L, 4L, 5L, 5L)),
.Names = c("T_ID", "P_ID", "c_ID"), class = "data.frame",
row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9"))
是否每笔交易只有一个customer id?我假设是这样。
第一步是删除那些没有客户 ID 的行。
cleanbasket = basket[bucket$c_ID != -1,]
接下来,我们要确定哪些交易包含 PANDORA。
transactions = unique(basket$T_ID[basket$P_ID == "PANDORA"])
然后获取这些交易的所有行
cleanbasket = cleanbasket[cleanbasket$T_ID %in% transactions,]
我有一个问题,我发现自己没有及时解决。真的很感谢任何帮助,因为我认为这里的一些专业人士只是几行代码。
我的数据包含超过 2 mio。行交易。我想对数据做一些关联规则。
我只对涉及产品 (P_ID) "PANDORA" 并且我认识客户 (c_ID) 的交易 (t_ID) 感兴趣。我举了个例子:
> T_ID <- c(10,10,10,11,12,13,13)
> P_ID <- c("PANDORA", "Others", "Pan","PANDORA","Ham", "PANDORA","Ham")
> c_ID <- c(1,1,1,2,-1,4,4)
> basket <- data.frame(T_ID,P_ID,c_ID)
> basket
T_ID P_ID c_ID
1 10 PANDORA 1
2 10 Others 1
3 10 Pan 1
4 11 PANDORA 2
5 12 Ham -1
6 13 PANDORA 4
7 13 Ham 4
事务 10 包含产品 "Pandora",因此所有 3 行都应保留在数据集中。虽然事务 12 没有附加客户,但需要将其删除。
我最纠结的部分是如何保留与包含 "PANDORA" 的同一交易 ID 相关但存储了另一个产品的交易行。
非常感谢任何帮助,
此致, 克里斯蒂安
也许这有帮助:
keep_IDs <- basket$T_ID[with(basket, P_ID=="PANDORA" & c_ID!=-1)]
basket[basket$T_ID %in% keep_IDs,]
# T_ID P_ID c_ID
#1 10 PANDORA 1
#2 10 Others 1
#3 10 Pan 1
#4 11 PANDORA 2
#6 13 PANDORA 4
#7 13 Ham 4
数据
basket <- structure(list(T_ID = c(10L, 10L, 10L, 11L, 12L, 13L, 13L, 14L, 14L),
P_ID = structure(c(6L, 4L, 5L, 6L, 1L, 6L, 1L, 3L, 2L),
.Label = c("Ham","Honey", "Nugget", "Others", "Pan", "PANDORA"), class = "factor"),
c_ID = c(1L, 1L, 1L, 2L, -1L, 4L, 4L, 5L, 5L)),
.Names = c("T_ID", "P_ID", "c_ID"), class = "data.frame",
row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9"))
是否每笔交易只有一个customer id?我假设是这样。
第一步是删除那些没有客户 ID 的行。
cleanbasket = basket[bucket$c_ID != -1,]
接下来,我们要确定哪些交易包含 PANDORA。
transactions = unique(basket$T_ID[basket$P_ID == "PANDORA"])
然后获取这些交易的所有行
cleanbasket = cleanbasket[cleanbasket$T_ID %in% transactions,]