1

我有一个示例数据集,如下所示:

tc <- textConnection('
path           touchpoint  time
abc             A           1        
abc             A           2        
abc             B           3        
abc             C           4         
def             A           2       
def             B           3       
def             D           4        
def             C           5        
def             D           6 
ghi             A           1
ghi             A           2
ghi             A           3
ghi             C           4
jkl             A           5        
jkl             A           6        
jkl             B           7        
jkl             C           8     
mno             B           1        
mno             A           2        
mno             A           3       
mno             C           4 
pqr             A           1
pqr             C           2
test     "touchpoint A"     1
test     "touchpoint-B"     2
')

paths <- read.table(tc, header=TRUE)

我想创建路径概览,并计算路径出现的次数。是touchpoints形成path. 每个path都由一个字符(或一组字符)标识,该字符在列中说明path。例如pathabc 包含接触点 A、A、B 和 C。作为输出,我想了解所有不同接触点的路径及其计数。

这个输出表没有固定的宽度,因为一条路径可以有大量不同的接触点。因此,我想在第一列中有计数。另外两个限制是:

  • 路径是根据时间创建的,时间最短的接触点应始终排在第一位。
  • 如果随后有来自同一实例的接触点(所以 AA),那么在概述中它应该显示为 A,或者更理想的是 A(2x)

我真的不知道从哪里开始这个..

该示例的预期输出为:

freq           1                2               3       4       5
 2             A                B               C   
 2             A                C
 1             A                B               D       C       D
 1             B                A               C
 1            "touchpoint A"    "touchpoint-B"

更理想的输出是:

freq           1                2               3       4       5
 2             A (2x)           B               C   
 1             A                B               D       C       D
 1             A (3x)           C
 1             B                A (2x)          C
 1             A (2x)           C
 1            "touchpoint A"    "touchpoint-B"

选择列名 1 到 N 来指示接触点是第一个、第二个还是第 N 个。请注意,在“理想”输出中,由于提供的第一个输出的旅程ghipqr提供的第一个输出的旅程相同(AAC 将在此处变为 AC),因此会呈现更多旅程。

4

1 回答 1

2

一个简短的辅助函数使用rle()和一点plyr

library(plyr)

foo <- function(x){
  r <- rle(as.character(x))
  short <- paste0(r$values, collapse="_")
  long  <- paste0(r$values, "(", r$lengths, ")", collapse="_")
  data.frame(short, long)
}

ddply(paths, .(path), function(x)foo(x$touchpoint))

  path                     short                            long
1  abc                     A_B_C                  A(2)_B(1)_C(1)
2  def                 A_B_D_C_D        A(1)_B(1)_D(1)_C(1)_D(1)
3  ghi                       A_C                       A(3)_C(1)
4  jkl                     A_B_C                  A(2)_B(1)_C(1)
5  mno                     B_A_C                  B(1)_A(2)_C(1)
6  pqr                       A_C                       A(1)_C(1)
7 test touchpoint A_touchpoint-B touchpoint A(1)_touchpoint-B(1)

这可以让你大部分时间到达那里。ddply()您可以使用另一个或tapply()类似的方法来计算出现次数。并且您可以将短格式转换为带有strsplit().

于 2013-02-27T16:11:37.643 回答