我有一个示例数据集,如下所示:
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
列中列出。例如path
abc包含接触点A,A,B和C.作为输出,我希望概述具有所有不同接触点的路径及其计数。
此输出表没有固定宽度,因为一条路径可能有大量不同的接触点。因此,我希望在第一列中有计数。另外两个限制是:
我真的不知道从哪里开始......
示例的预期输出为:
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个。请注意,在“理想”输出中,由于ghi
和pqr
对于提供的第一个输出的行程相同(AAC将成为AC),因此会显示一次更多行程。
答案 0 :(得分: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()
将短格式转换为表格。