用R中另一列的分组值进行计数来创建一个新的数据框

下车

我有一份产品清单,以及以数据框形式购买这些产品的客户

client product
001 pants
001 shirt
001 pants
002 pants
002 shirt
002 shoes

我需要在tuplas中重新订购产品,并在第三列中添加购买这两种产品的客户数量。解决方案将是两个不同的表,一个具有唯一的客户,另一个具有总购买的元组。因此,在前面的示例中,结果将是:

product1 product2 count
pants shirt 2
pants shoes 1
shirt shoes 1

product1 product2 count
pants shirt 3
pants shoes 1
shirt shoes 1

我想避免信息重复。例如,不需要“衬衫裤子2”。

有人知道该怎么做吗?

谢谢!

索托斯

这可能不是最有效的方法,也不是最优雅的方法,但是它可以满足您的需求。假设您的初始列名称是“客户”和“产品”,

library(stringr)
Count.Sales <- function(df){
df3 <- as.data.frame(t(combn(paste0(df$client, df$product), 2)))
df4 <- as.data.frame(table(df3[str_extract(df3$V1, '[[:digit:]]+') == str_extract(df3$V2, '[[:digit:]]+'),]))
df4 <- subset(df4, df4$Freq > 0)
df4$customer <- str_extract(df4$V1, '[[:digit:]]+')
df4[, !(colnames(df4) %in% c("Freq","customer"))] <- apply(df4[, !(colnames(df4) %in% c("Freq","customer"))], 2, function(i) sub('[[:digit:]]+', '', i))
new.df<- within(df4, rm(Freq))
new.df[] <- lapply(new.df, as.character)
r1 <- apply(new.df[,-3], 1, function(i)any(i[-1] != i[1]))
new.df <- new.df[r1,]
new.df$pairs <- do.call(paste, c(new.df[,-3], ' '))
new.df$pairs <- vapply(new.df$pairs, function(i) paste(sort(strsplit(i, ' ')[[1]]), collapse=' '), ' ')
t4 <- data.frame(with(new.df, table(pairs, customer)))
t4  <- t4[t4$Freq != 0,]
per_customer <- as.data.frame(table(t4$pairs))
total <- as.data.frame(table(new.df$pairs))
ls1 <- list(per_customer, total)
names(ls1) <- c('Unique.Customer', 'Total')
return(ls1)
}
Count.Sales(df)
#$Unique.Customer
#          Var1 Freq
#1  pants shirt    2
#2  pants shoes    1
#3  shirt shoes    1
#
#$Total
#          Var1 Freq
#1  pants shirt    3
#2  pants shoes    1
#3  shirt shoes    1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

数据框,使用基于另一列索引的值创建一个新列

根据熊猫中另一列上的值在数据框中创建一个新列

如何创建一个新列,按每个 n 数字对另一列值进行分组?熊猫

创建一个包含另一个数据框列中唯一值计数的 R 数据框

根据 Pandas 中另一列中相似值的分组创建一个新列

在R中另一数据框中的另一列的基础上在一个数据框中创建一列

pandas 数据框创建一个新列,其值基于另一列上的 groupby sum

在数据框中添加新列以对另一个数据框中的行进行计数

如何在 R 中创建一个新列,其中包含数据集中另一列中的观察计数?

在Dataframe中对列进行分组,并使用分组的数据创建另一个数据框

根据另一列中的最大值为熊猫数据框中的给定子索引创建一个新列

根据另一列中的值创建新的r data.table列并进行分组

r 创建与按另一列分组的行元素匹配的新数据框

我将如何创建一个具有aa列的唯一值并对其进行计数的新数据框?

Python:在数据框中,创建一个新列,并使用从另一列的值中切出的字符串

根据与另一个数据框中的值匹配的行数创建新列

根据另一列中的值创建一个计数连续变量

创建一个基于R中的另一列对从一列中提取的字符串文本进行分组的列

根据 R 中一列的值将一个数据框中的值插入到另一个数据框中

创建一个新列,该列采用 R 中另一列的初始值

根据来自另一列的值在 R 数据框中添加一个带有 html 标签的新列

R:如何创建一个基于另一列某些值的新列?

对R中数据框的一列进行计数

基于R中另一列的值进行计数

以 R 中另一列值的总和为条件在数据框中创建新列

使用 R 中另一个数据框中的值在数据框中创建新变量

根据另一列和另一个表中的值创建一个新列

R:使用另一个数据框创建一个新列

根据另一个数据框列的唯一值创建一个新的数据框