在观测值内识别随时间变化的模式(R)
我有数年来数千人的转移支付数据,每个月都有记录,无论观察者当月是否收到付款。我想知道,理论上提出的某些类型的转移接收机是否能被数据所证实。为此,我计划先做一些描述性统计,然后使用包在观测值内识别随时间变化的模式(R),r,traminer,R,Traminer,我有数年来数千人的转移支付数据,每个月都有记录,无论观察者当月是否收到付款。我想知道,理论上提出的某些类型的转移接收机是否能被数据所证实。为此,我计划先做一些描述性统计,然后使用包TraMineR 然而,首先,我想简单地找出哪个观察符合哪个类别。例如,其中一类是短期接受经济援助的人,他们只出现一次。因此,我需要确定所有只收到三个月(或更短)付款的观察者。此外,这些接受援助的时间是不能中断的,因此,如果有人接受了两个月的援助,两个月没有,然后又接受了一个月的援助,这已经是一个不同的类别。以下是仅一
TraMineR
然而,首先,我想简单地找出哪个观察符合哪个类别。例如,其中一类是短期接受经济援助的人,他们只出现一次。因此,我需要确定所有只收到三个月(或更短)付款的观察者。此外,这些接受援助的时间是不能中断的,因此,如果有人接受了两个月的援助,两个月没有,然后又接受了一个月的援助,这已经是一个不同的类别。以下是仅一年和30次观察的一个小例子:
dat <- data.frame(matrix(c(0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0),ncol=12))
dat您可以使用此功能识别连续付款期的数量以及每个期间的月数:
aid <- lapply(apply(dat, 1, rle), function(x) unname(x$lengths[x$values==1]))
表示第1行没有期间,第8行有一个为期3个月的期间,第13行有两个为期1个月的期间
要了解每行有多少个连续的句点,可以使用以下命令:
cont <- sapply(aid, length)
请注意,只有第13行有两个独立的句点。您可以使用rle
函数在不同时间过滤哪些行的值等于1
idx <- apply(dat,1,function(x){
y <- rle(x)
length(y$lengths[y$values ==1])> 1
})
dat[idx,]
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12
13 0 0 0 0 0 0 0 0 1 0 0 1
谢谢,看起来很有希望!我玩弄了apply函数,但没有让它工作。再次感谢。
> cont
[1] 0 1 1 0 0 0 1 1 0 0 1 1 2 0 1 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0
> cont[13]
[1] 2
idx <- apply(dat,1,function(x){
y <- rle(x)
length(y$lengths[y$values ==1])> 1
})
dat[idx,]
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12
13 0 0 0 0 0 0 0 0 1 0 0 1
rowSums(dat[!idx,]) <=3