3

我有数以千计的人在几年内每月输入的转移支付数据,无论观察是否在当月收到付款。我想看看理论提出的某些类型的传输接收器是否可以被数据证实。为此,我计划先做一些描述性统计,然后再使用 package 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))

在此示例中,我的问题是第 13 行,否则我可以简单地使用rowSums,然后选择结果等于或小于 3 的每一行。我可以使用哪个程序来仅识别仅在一个连接期间获得帮助的那些观察?我将如何识别诸如 13 之类的观察结果?

4

2 回答 2

3

您可以使用此函数来识别连续付款期的数量以及每个期间的月数:

aid <- lapply(apply(dat, 1, rle), function(x) unname(x$lengths[x$values==1]))

这将返回一个列表,每行数据一个组件。例如:

> aid[[1]]
integer(0)
> aid[[8]]
[1] 3
> aid[[13]]
[1] 1 1

表示第 1 行没有期间,第 8 行有一个 3 个月的期间,第 13 行有两个 1 个月的期间。

要找出每行有多少个连续周期,您可以使用以下命令:

cont <- sapply(aid, length)

结果:

> 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

请注意,只有第 13 行有两个单独的句点。

于 2013-04-03T13:36:34.570 回答
2

您可以使用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

然后你可以申请rowSums 过滤的数据

rowSums(dat[!idx,]) <=3
于 2013-04-03T13:48:16.447 回答