我想计算特定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
答案 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