R中具有不同序列的重复行

R中具有不同序列的重复行,r,R,我设法以这种形式(R)获取原始数据,即每个产品组合(3个组合)各自的计数,但正如您所看到的,有重复发生,有相同产品的行,但这些产品的顺序不同,我需要一种方法来组合这些行,而不考虑顺序,并添加总和(num)其中的一个可以得到总和。 这只是整个数据集的一部分。帮我想出一个办法 pages sum(num) Badezimmer,Baumarkt,Büromöbel 6 Badezimmer,Baumarkt,Dekoration

我设法以这种形式(R)获取原始数据,即每个产品组合(3个组合)各自的计数,但正如您所看到的,有重复发生,有相同产品的行,但这些产品的顺序不同,我需要一种方法来组合这些行,而不考虑顺序,并添加总和(num)其中的一个可以得到总和。 这只是整个数据集的一部分。帮我想出一个办法

             pages               sum(num)
Badezimmer,Baumarkt,Büromöbel          6
Badezimmer,Baumarkt,Dekoration        14
Badezimmer,Baumarkt,Flur              30
Badezimmer,Baumarkt,Garten            18
Badezimmer,Baumarkt,Heimtextilien    100
Badezimmer,Baumarkt,Kinder            28
Badezimmer,Büromöbel,Baumarkt         16
Badezimmer,Flur,Baumarkt              40

这里有一种可能性:

df1$pages <- as.character(df1$pages) # prevent use of factors    
df1$pages <- sapply(sapply(df1$pages,function(x) strsplit(x,",")),function(x) paste(sort(unlist(x)),collapse=',')) #split at commas, order words alphabetically, and restore the description
df1 <- aggregate(sum.num. ~ ., df1, sum) #sum over identical 'pages'
#                              pages sum.num.
#1     Badezimmer,Baumarkt,Büromöbel       22
#2    Badezimmer,Baumarkt,Dekoration       14
#3          Badezimmer,Baumarkt,Flur       70
#4        Badezimmer,Baumarkt,Garten       18
#5 Badezimmer,Baumarkt,Heimtextilien      100
#6        Badezimmer,Baumarkt,Kinder       28

df1$pages这里有一种可能性:

df1$pages <- as.character(df1$pages) # prevent use of factors    
df1$pages <- sapply(sapply(df1$pages,function(x) strsplit(x,",")),function(x) paste(sort(unlist(x)),collapse=',')) #split at commas, order words alphabetically, and restore the description
df1 <- aggregate(sum.num. ~ ., df1, sum) #sum over identical 'pages'
#                              pages sum.num.
#1     Badezimmer,Baumarkt,Büromöbel       22
#2    Badezimmer,Baumarkt,Dekoration       14
#3          Badezimmer,Baumarkt,Flur       70
#4        Badezimmer,Baumarkt,Garten       18
#5 Badezimmer,Baumarkt,Heimtextilien      100
#6        Badezimmer,Baumarkt,Kinder       28

df1$pages这里有一个选项,使用
cSplit
来自
库(splitstackshape)
。我们将“data.frame”转换为“data.table”,使用选项
keep.rownames=TRUE
将“pages”列拆分为“,”,并使用
cSplit
转换为“long”格式。按“rn”分组,我们对“pages”进行
排序
并将其粘贴在一起,我们还得到了“sum.num”的第一个值。然后,我们得到按“pages”分组的“sum.num.”的
sum

library(splitstackshape)
library(data.table)
cSplit(setDT(df1, keep.rownames=TRUE), 'pages', ',', 'long')[,
   list(pages=toString(sort(pages)), sum.num.= sum.num.[1]) ,rn
   ][,list(Sum=sum(sum.num.)) , .(pages)]
 #                                 pages Sum
#1:     Badezimmer, Baumarkt, Büromöbel  22
#2:    Badezimmer, Baumarkt, Dekoration  14
#3:          Badezimmer, Baumarkt, Flur  70
#4:        Badezimmer, Baumarkt, Garten  18
#5: Badezimmer, Baumarkt, Heimtextilien 100
#6:        Badezimmer, Baumarkt, Kinder  28

注意:@RHertel的帖子中的“df1”。

这里有一个使用
库(splitstackshape)
中的
cSplit
的选项。我们将“data.frame”转换为“data.table”,使用选项
keep.rownames=TRUE
将“pages”列拆分为“,”,并使用
cSplit
转换为“long”格式。按“rn”分组,我们对“pages”进行
排序
并将其粘贴在一起,我们还得到了“sum.num”的第一个值。然后,我们得到按“pages”分组的“sum.num.”的
sum

library(splitstackshape)
library(data.table)
cSplit(setDT(df1, keep.rownames=TRUE), 'pages', ',', 'long')[,
   list(pages=toString(sort(pages)), sum.num.= sum.num.[1]) ,rn
   ][,list(Sum=sum(sum.num.)) , .(pages)]
 #                                 pages Sum
#1:     Badezimmer, Baumarkt, Büromöbel  22
#2:    Badezimmer, Baumarkt, Dekoration  14
#3:          Badezimmer, Baumarkt, Flur  70
#4:        Badezimmer, Baumarkt, Garten  18
#5: Badezimmer, Baumarkt, Heimtextilien 100
#6:        Badezimmer, Baumarkt, Kinder  28

注:@RHertel帖子中的“df1”。

是的,这有帮助,了解的软件包很好,谢谢。这有帮助,了解的软件包很好,谢谢。但我恐怕选择了另一种解决方案,因为我知道了与此不同的软件包。不客气,谢谢您的反馈。选择你认为最有用的答案是完全正确的。我也很高兴学习新方法,我认为@akrun的解决方案很棒。做得好,这是一项艰巨的任务!我仍在考虑一个关于内存“移动”的更有效的解决方案(字符串操作在R中不是很有效,特别是当您使用[s]apply“循环”所有行时)。谢谢,@RYoda。我同意非循环解决方案更可取,但我不知道如何在base R中实现这一点(akrun的解决方案不使用循环,但我假设循环是在他使用的包的罩下运行的)。如果你发现了什么,请发布你的解决方案@RHertel:我只是没有看到(或找不到;-)比akrun使用splitstackshape包的解决方案更优雅(可能更快)的解决方案。如果使用某种矢量化,隐式循环是可以的。谢谢你,但我恐怕选择了另一种解决方案,因为我知道了一个不同的包。不客气,谢谢你的反馈。选择你认为最有用的答案是完全正确的。我也很高兴学习新方法,我认为@akrun的解决方案很棒。做得好,这是一项艰巨的任务!我仍在考虑一个关于内存“移动”的更有效的解决方案(字符串操作在R中不是很有效,特别是当您使用[s]apply“循环”所有行时)。谢谢,@RYoda。我同意非循环解决方案更可取,但我不知道如何在base R中实现这一点(akrun的解决方案不使用循环,但我假设循环是在他使用的包的罩下运行的)。如果你发现了什么,请发布你的解决方案@RHertel:我只是没有看到(或找不到;-)比akrun使用splitstackshape包的解决方案更优雅(可能更快)的解决方案。如果使用某种矢量化,隐式循环是可以的。