2013-02-07 70 views
2
彙總表

我的數據是按以下格式:創建基於類別範圍r中

input<-data.frame(
    region=c("A","T","R","R","T"), 
    geomorph=c("F","F","S","S","P"), 
    depth=c(2.6,3.5,5.8,6.7,8.9)) 

> input 
    region geomorph depth 
1  A  F 2.6 
2  T  F 3.5 
3  R  S 5.8 
4  R  S 6.7 
5  T  P 8.9 

我想創建一個彙總表,使得對於給定深度的類別(即0-3,3 -6,6-10)條目區域(即,A,R,T)和地貌(即F,S,P)的數量進行計數,並提出如下:

output<-data.frame(
    depth.category=c("0-3","3-6","6-10"), 
    total=c(1,2,2), 
    A=c(1,0,0), 
    R=c(0,1,1), 
    T=c(0,1,1), 
    F=c(1,1,0), 
    S=c(0,1,1), 
    P=c(0,0,1)) 

> output 
    depth.category total A R T F S P 
1   0-3  1 1 0 0 1 0 0 
2   3-6  2 0 1 1 1 1 0 
3   6-10  2 0 1 1 0 1 1 

任何建議如何去對這個?

回答

5

首先,剛剛創建使用cut您的時間間隔,然後用tablecbind結果:

intervals <- cut(input$depth, breaks=c(0, 3, 6, 10)) 

cbind(table(intervals), 
     table(intervals, input$region), 
     table(intervals, input$geomorph)) 
#   A R T F P S 
# (0,3] 1 1 0 0 1 0 0 
# (3,6] 2 0 1 1 1 0 1 
# (6,10] 2 0 1 1 0 1 1 

上面的輸出是一個matrix。如果您需要一個data.frame,請使用以下內容:

temp <- cbind(table(intervals), 
     table(intervals, input$region), 
     table(intervals, input$geomorph)) 

temp <- data.frame(depth.category = rownames(temp), 
        as.data.frame(temp, row.names = 1:nrow(temp))) 
names(temp)[2] <- "Total" 
temp 
# depth.category Total A R T F P S 
# 1   (0,3]  1 1 0 0 1 0 0 
# 2   (3,6]  2 0 1 1 1 0 1 
# 3   (6,10]  2 0 1 1 0 1 1 
+0

謝謝!我只是想知道,如果深度是3,將使用上面的解決方案將它放入哪個類別(0-3或3-6)? – Elizabeth

+2

你可以嘗試'cut(3,breaks = c(0,3,6))'(然後'cut(3,breaks = c(0,3,6),right = FALSE)') ! –

+0

Gotcha。因此,總結:當right = TRUE時,切割號碼(即3)被包括在較低類別中,並且當right = FALSE時,切割號碼被包括在較高類別中。或者,[指出]哪個方向指示切割編號屬於哪個類別。易於理解但難以解釋(至少對我而言)。 – Elizabeth