【问题标题】:Formatting the output in R在 R 中格式化输出
【发布时间】:2014-12-10 12:06:26
【问题描述】:

我有一组显示访问 ID 和主题名称的数据

visit<-c(1,2,3,1,2,1,1,2,3,1,2,3)
subject<-c("A","A","A","B","B","C","D","D","D","E","E","E")
data<-data.frame(visit=visit,subject=subject)

我试图计算出每个主题的最新访问 ID:

tapply(visit,subject,max)

我得到这个输出:

A B C D E
3 2 1 3 3

我想知道是否有任何方法可以更改输出,使其变为:

A  3
B  2
C  1
D  3
E  3

谢谢

【问题讨论】:

    标签: r format output


    【解决方案1】:

    你可以试试aggregate

    aggregate(visit~subject, data, max)
    #   subject visit
    #1       A     3
    #2       B     2
    #3       C     1
    #4       D     3
    #5       E     3
    

    或来自tapply

    res <- tapply(visit,subject,max)
    data.frame(subject=names(res), visit=res)
    

    data.table

    library(data.table)
    setDT(data)[, list(visit=max(visit)), by=subject]
    

    【讨论】:

      【解决方案2】:

      dplyr 的解决方案是:

      library(dyplr)  
      data %>% group_by(subject) %>% summarize(max = max(visit))
      ## Source: local data frame [5 x 2]
      
      ##   subject max
      ## 1       A   3
      ## 2       B   2
      ## 3       C   1
      ## 4       D   3
      ## 5       E   3
      

      【讨论】:

        【解决方案3】:

        它可能感觉很脏,但使用基本函数 as.matrix(或 matrix)将满足您的需求。

        > as.matrix(tapply(visit,subject,max))
          [,1]
        A    3
        B    2
        C    1
        D    3
        E    3
        

        【讨论】:

          【解决方案4】:

          您可以使用stack 在基础 R 中轻松做到这一点:

          stack(tapply(visit, subject, max))
          #   values ind
          # 1      3   A
          # 2      2   B
          # 3      1   C
          # 4      3   D
          # 5      3   E
          

          (注意:在这种情况下,“visit”和“subject”的值实际上并不是来自您的data.frame。只是认为您应该知道!)


          (第二点:您也可以使用data.frame(as.table(tapply(visit, subject, max))),但这比使用stack 更具欺骗性,因此可能会导致以后代码的可读性降低。)

          【讨论】:

            猜你喜欢
            • 2018-01-24
            • 2012-10-15
            • 2016-10-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-02-05
            • 1970-01-01
            • 2023-03-04
            相关资源
            最近更新 更多