計算頻率和從長到寬轉換的更快的方法我試圖獲得兩個變量“周”和“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條經驗 獲得超8個贊
你不需要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 關注
- 787 瀏覽
添加回答
舉報
0/150
提交
取消