2014-01-14 88 views
0

我想計算特定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 

回答

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 
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