从表函数中检索变量

时间:2014-01-14 10:03:44

标签: r aggregate grouping

我想计算特定V1的有效V2数。我正在使用table()函数,但在这里我不知道如何拆分output(a0[2])class(a0[2])是一个data.frame

> a
   V1     V2
1   1 lapsed
2   1 lapsed
3   1 active
4  33 active
5  33 active
6  55 lapsed
7  55 lapsed
8  55 active
9  55 active
10 55 active
> a0 <- aggregate(a$V2 ~ a$V1, data= a, function(x){table(x)})
> a0
  a$V1 a$V2.active a$V2.lapsed
1    1           1           2
2   33           2           0
3   55           3           2
> a0[1]
  a$V1
1    1
2   33
3   55
> a0[2]
  a$V2.active a$V2.lapsed
1           1           2
2           2           0
3           3           2

我正在尝试计算a$V1中的唯一值,(有效)/(有效+已失效)的数量。希望输出如下所示:

col1    active/(active+lapsed)
1            1/3
33           2/2
55           3/5

2 个答案:

答案 0 :(得分:1)

您不需要aggregate

DF <- read.table(text="   V1     V2
1   1 lapsed
2   1 lapsed
3   1 active
4  33 active
5  33 active
6  55 lapsed
7  55 lapsed
8  55 active
9  55 active
10 55 active")

tmp <- table(DF)
res <- cbind.data.frame(rownames(tmp), 
                        paste(tmp[,"active"], 
                              rowSums(tmp), 
                              sep="/"))
names(res) <- c("col1", "active/(active+lapsed)")

#  col1 active/(active+lapsed)
#1    1                    1/3
#2   33                    2/2
#3   55                    3/5

答案 1 :(得分:1)

a1 <- data.frame( col1 = a0[[1]], col2 = a0[[2]][1:3], col3 = a0[[2]][4:6] )
a1$col4 <- with( a1, paste( col2, "/", ( col2 + col3 ), sep = "" ) )
a1$col5 <- with( a1, col2 / ( col2 + col3 ) )
> a1
  col1 col2 col3 col4      col5
1    1    1    2  1/3 0.3333333
2   33    2    0  2/2 1.0000000
3   55    3    2  3/5 0.6000000