为了账号安全,请及时绑定邮箱和手机立即绑定

计算频率和从长到宽转换的更快的方法

计算频率和从长到宽转换的更快的方法

慕容708150 2019-06-01 10:46:18
计算频率和从长到宽转换的更快的方法我试图获得两个变量“周”和“id”的每个级别的计数。我希望结果有“id”作为行,“Week”作为列,并将其算作值。到目前为止我尝试过的例子(尝试了许多其他事情,包括添加一个虚拟变量=1,然后fun.aggregate = sum在此之上):library(plyr)ddply(data, .(id), dcast, id ~ week, value_var = "id",         fun.aggregate = length, fill = 0, .parallel = TRUE)但是,我肯定做错了什么,因为这个函数还没有完成。有更好的方法吗?投入:id      week1       11       21       31       12       3产出:  1  2  31 2  1  12 0  0  1
查看完整描述

4 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

你不需要ddply为了这个。这个dcast从…reshape2就足够了:


dat <- data.frame(

    id = c(rep(1, 4), 2),

    week = c(1:3, 1, 3)

)


library(reshape2)

dcast(dat, id~week, fun.aggregate=length)


  id 1 2 3

1  1 2 1 1

2  2 0 0 1

编辑:对于基本R解(不包括table-如约书亚·尤利希所发),试一试xtabs:


xtabs(~id+week, data=dat)


   week

id  1 2 3

  1 2 1 1

  2 0 0 1


查看完整回答
反对 回复 2019-06-01
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

你可以用table指挥:

table(data$id,data$week)

    1 2 3
  1 2 1 1
  2 0 0 1

如果“id”和“Week”是数据框架中的唯一列,则只需使用:

table(data)#    week# id  1 2 3#   1 2 1 1#   2 0 0 1


查看完整回答
反对 回复 2019-06-01
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

一些tidyverse备选方案:

library(tidyverse)df %>%
  count(id, week) %>%
  spread(week, n, fill = 0)#     id   `1`   `2`   `3`#   <dbl> <dbl> <dbl> <dbl>#1    
   1     2     1     1#2     2     0     0     1

或分组,数行数,然后展开

df %>%
  group_by(id, week) %>% #OR group_by_all()
  summarise(count = n()) %>%
  spread(week, count, fill = 0)


查看完整回答
反对 回复 2019-06-01
  • 4 回答
  • 0 关注
  • 748 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信