计算频率和从长到宽转换的更快的方法我试图获得两个变量“周”和“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
慕田峪7331174
TA贡献1828条经验 获得超13个赞
table
table(data$id,data$week) 1 2 3 1 2 1 1 2 0 0 1
table(data)# week# id 1 2 3# 1 2 1 1# 2 0 0 1
守着星空守着你
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)
- 4 回答
- 0 关注
- 748 浏览
添加回答
举报
0/150
提交
取消