2013-03-15 21 views
0

我有一個數據集,看起來像3路製表中的R

| ID | Category | Failure | 
|----+----------+---------| 
| 1 | a  | 0  | 
| 1 | b  | 0  | 
| 1 | b  | 0  | 
| 1 | a  | 0  | 
| 1 | c  | 0  | 
| 1 | d  | 0  | 
| 1 | c  | 0  | 
| 1 | failure | 1  | 
| 2 | c  | 0  | 
| 2 | d  | 0  | 
| 2 | d  | 0  | 
| 2 | b  | 0  | 

這是數據,其中每個ID可能在出現故障事件結束,通過事件{a, b, c, d}的中間序列。我希望能夠通過失敗事件來統計每個中間事件發生的ID的數量。

所以,我想形式

|   | a | b | c | d | 
|------------+---+---+---+---| 
| Failure | 4 | 5 | 6 | 2 | 
| No failure | 9 | 8 | 6 | 9 | 

的一個表,其中,例如,數字4表示在a發生的ID 4以失敗告終。

我該如何去做R?

回答

1

可以使用table例如:

dat <- data.frame(categ=sample(letters[1:4],20,rep=T), 
        failure=sample(c(0,1),20,rep=T)) 

res <- table(dat$failure,dat$categ) 
rownames(res) <- c('Failure','No failure') 
res 
      a b c d 
Failure 3 2 2 1 
No failure 1 2 4 5 

您可以使用barplot繪製它:

barplot(res) 

enter image description here

編輯通過ID得到這個,你可以使用by例如:

dat <- data.frame(ID=c(rep(1,9),rep(2,11)),categ=sample(letters[1:4],20,rep=T), 
       failure=sample(c(0,1),20,rep=T)) 
by(dat,dat$ID,function(x)table(x$failure,x$categ)) 
dat$ID: 1 

    a b c d 
    0 1 2 1 3 
    1 1 1 0 0 
--------------------------------------------------------------------------------------- 
dat$ID: 2 

    a b c d 
    0 1 2 3 0 
    1 1 3 1 0 

編輯使用tapply

另一種方式來獲得,這是使用tapply

with(dat,tapply(categ,list(failure,categ,ID),length)) 
+0

'categ'還包括故障指示器作爲一個可能的值,我怎麼能調整爲? – tchakravarty 2013-03-15 07:19:55

+0

@fgnu你可以看到我的編輯。 – agstudy 2013-03-15 07:25:48