选择中点访问不平衡的纵向数据

时间:2016-05-25 23:10:28

标签: r

我有一些不平衡的纵向数据(每个参与者的访问次数不同)。我想提取每个参与者的中点访问,并将其转换为数据框。所以

  1. 如果参与者的访问次数为奇数,则为单次访问;
  2. 如果参与者的访问次数均为偶数,则平均为两次访问。
  3. 我虽然可以先使用$hello = $_SESSION['hello']; echo(json_encode($hello)); 来计算参与者table()的访问次数,然后根据其是奇数还是偶数来提取中点访问次数。

    id

    有更优雅的方法吗?

1 个答案:

答案 0 :(得分:1)

这似乎是一种简单的方法。为了便于您检查正确性,请尝试以下示例数据集:

id <- c(rep(1,5),rep(2,4),rep(3,15),rep(4,8))
b <- c(1:5, 1:4, 1:15, 1:8)
c <- b
data <- cbind(id,b,c)

如:

> table(id)
id
 1  2  3  4 
 5  4 15  8 

3, 2.5, 8, 4.5b的正确答案为c

现在:

## a function to return relavant mid points
mid <- function(id) {
  x <- table(id); y <- c(0, cumsum(x)[-length(x)])
  fun <- function(x) switch(x%%2 + 1, c(x/2, x/2+1), (x+1)/2)
  rep(y, 2 - x %% 2) + as.numeric(unlist(tapply(x, 1:length(x), FUN = fun)))
  }

## use na.action = na.pass if you want to retain missing values
## use subset = mid(id), to process the subset involving mid points
## formula methods of aggregate takes data frame
aggregate(. ~ id, as.data.frame(data), FUN = mean, subset = mid(id),
          na.action = na.pass)

你得到:

  id   b   c
1  1 3.0 3.0
2  2 2.5 2.5
3  3 8.0 8.0
4  4 4.5 4.5