【问题标题】:transpose long to wide within groups with tidyverse用 tidyverse 在组内从长到宽转置
【发布时间】:2018-12-02 07:00:42
【问题描述】:

我不能完全解决这个问题。 我怎么去:

Visit Test
1     A
1     B
2     A
2     C
3     B

收件人:

Visit A     B     C
1     TRUE  TRUE  FALSE
2     TRUE  FALSE TRUE
3     FALSE TRUE  FALSE

【问题讨论】:

    标签: r tidyverse


    【解决方案1】:

    使用dplyrtidyr 你可以做到

    dd %>% mutate(Value=TRUE) %>% 
      spread(Test, Value, fill=FALSE)
    
    #   Visit     A     B     C
    # 1     1  TRUE  TRUE FALSE
    # 2     2  TRUE FALSE  TRUE
    # 3     3 FALSE  TRUE FALSE
    

    经过测试

    dd<-read.table(text="Visit Test
           1     A
           1     B
           2     A
           2     C
           3     B", header=T)
    

    【讨论】:

      【解决方案2】:

      另一个选项是使用reshape2::dcastfun.aggregate 来检查length 是否大于0

      library(reshape2)
      
      dcast(df,Visit~Test, fun.aggregate = function(x)length(x)>0, value.var = "Test")
      
      #   Visit     A     B     C
      # 1     1  TRUE  TRUE FALSE
      # 2     2  TRUE FALSE  TRUE
      # 3     3 FALSE  TRUE FALSE
      

      数据:

      df<-read.table(text="Visit Test
      1     A
      1     B
      2     A
      2     C
      3     B", 
      header=TRUE, stringsAsFactor = FALSE)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-13
        • 1970-01-01
        • 2019-06-13
        • 1970-01-01
        • 2020-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多