2014-01-14 2 views
0

특정 V1에 대한 활성 V2의 수를 계산하려고합니다. 을 분할하는 방법을 알지 못하지만 여기서는 table() 기능을 사용하고 있습니다. class(a0[2]) 내가 a$V1에 고유 한 값을 계산하기 위해 노력하고테이블 함수에서 변수 검색

> 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 

data.frame에게이며, 수 (활성)/(경과 + 활성). 아래처럼 보이도록 출력을 원하는 :

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