R 按ID划分的轨迹频率

R 按ID划分的轨迹频率,r,dplyr,count,sum,duplicates,R,Dplyr,Count,Sum,Duplicates,我知道有数百个关于如何计数的问题和答案,但我真的找不到解决问题的办法,我的想法也没有了 我有一组轨迹,例如纵向数据,每个周期都有一个值。如果所有的值按id相同,我需要获得特定轨迹的计数 mydata <- data.frame(id=rep(1:8, each = 4), time=rep(1:4, 8), value=c(1,1,2,2,1,2,3,4,1,1,2,2,1,2,2,3,1,3,4,4,1,2,3

我知道有数百个关于如何计数的问题和答案,但我真的找不到解决问题的办法,我的想法也没有了

我有一组轨迹,例如纵向数据,每个周期都有一个值。如果所有的值按id相同,我需要获得特定轨迹的计数

mydata <- data.frame(id=rep(1:8, each = 4), time=rep(1:4, 8),
                                       value=c(1,1,2,2,1,2,3,4,1,1,2,2,1,2,2,3,1,3,4,4,1,2,3,4,1,2,2,2,1,1,2,2))



desired_output <- data.frame(id=rep(c("1_3_8","2_6","4","5","7"),each = 4), time=rep(1:4, 5),
                         value=c(1,1,2,2,   1,2,3,4,         1,2,2,3,    1,3,4,4,      1,2,2,2),
                         weight = c(3,3,3,3,  2,2,2,2, 1,1,1,1,1,1,1,1,1,1,1,1  ))

mydata我已经在下面的reprex中写下了我将如何做,但是我想我的解决方案有很多步骤,其中一部分是将其转换为所需的输出形式。(解决方案可能是这些行的子集中所需的形式,因此我建议您一次运行一行代码以进行检查)

  • 重新排列行,使时间成为列,使完整轨迹只占用一行(使用
    pivot\u wider()
    完成)
  • 将轨迹组合成字符串(即每个轨迹都是唯一定义的)。我使用了
    unite()
    函数来实现这一点
  • 按轨迹分组并计算每条轨迹的数量。我使用了
    groupby()
    和n()来实现这一点
  • 嵌套数据帧以收集ID(使用
    Nest
  • 将匹配轨迹列表转换为ID字符串
  • 使用mutates和unnest将数据转换回长格式(使用
    unnest
    和字符串操作函数)
  • 将时间加回,因为轨迹保持在每个唯一轨迹的顺序中
  • 库(tidyverse)
    mydata%
    pivot\u Widther(id\u cols=id,names\u from=time,values\u from=value)%>%
    联合(列=轨迹,-id,sep=“/”)%>%
    分组依据(轨迹)%>%
    变异(权重=n())%>%
    嵌套(id)%>%
    解组()%>%
    变异(id=map\u chr(数据,~paste(.x$id,collapse=“\u”)))%>%
    突变(轨迹=str_分割(轨迹,“/”)%>%
    选择(ID、轨迹、重量)%>%
    unnest(c(轨迹))%>%
    分组依据(ID)%>%
    突变(次数=1:长度(轨迹))
    #>#A tibble:20 x 4
    #>#组:ID[5]
    #>ids轨迹加权时间
    #>               
    #>  1 1_3_8 1                 3     1
    #>  2 1_3_8 1                 3     2
    #>  3 1_3_8 2                 3     3
    #>  4 1_3_8 2                 3     4
    #>  5 2_6   1                 2     1
    #>  6 2_6   2                 2     2
    #>  7 2_6   3                 2     3
    #>  8 2_6   4                 2     4
    #>  9 4     1                 1     1
    #> 10 4     2                 1     2
    #> 11 4     2                 1     3
    #> 12 4     3                 1     4
    #> 13 5     1                 1     1
    #> 14 5     3                 1     2
    #> 15 5     4                 1     3
    #> 16 5     4                 1     4
    #> 17 7     1                 1     1
    #> 18 7     2                 1     2
    #> 19 7     2                 1     3
    #> 20 7     2                 1     4
    
    由(v2.0.0)于2021-04-07创建