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が含まれています。出力として、すべての異なるタッチポイントのパスの概要とその数を示します。

1つのパスに多数の異なるタッチポイントを含めることができるため、この出力テーブルの幅は固定されていません。したがって、最初の列にカウントを入れたいと思います。他の2つの制約は次のとおりです。

  • パスは時間に基づいて作成されます。時間の最も短いタッチポイントが常に最初に来る必要があります。
  • 後で同じインスタンスからのタッチポイントがある場合(つまり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は、タッチポイントが1番目、2番目、またはN番目のいずれであるかを示すために選択されます。ghi「理想的な」出力では、提供される最初の出力のジャーニーが同じであるため、さらに1つのジャーニーが表示されることに注意してくださいpqr(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 に答える