【问题标题】:Creating a summary table based on range categories in r根据 r 中的范围类别创建汇总表
【发布时间】:2013-02-07 10:14:19
【问题描述】:

我的数据格式如下:

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

有什么建议可以解决这个问题吗?

【问题讨论】:

    标签: r summary


    【解决方案1】:

    首先,使用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
    

    【讨论】:

    • 谢谢!我只是想知道,如果深度为 3,使用上面的解决方案将其放入哪个类别(0-3 或 3-6)?
    • 你可以试试cut(3, breaks=c(0,3,6))(然后cut(3, breaks=c(0,3,6), right=FALSE))亲自看看!
    • 明白了。总结一下:当 right=TRUE 时,cut 编号(即 3)包含在较低的类别中,而当 right=FALSE 时,cut 编号包含在较高的类别中。或者,无论 ] 指向哪个方向,都会显示剪辑编号属于哪个类别。易于理解但难以解释(至少对我而言)。
    • @Elizabeth -- 对。这是"closed" vs. "open" intervals 的数学符号,但我经常只是检查以确保我做对了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    相关资源
    最近更新 更多