亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計算頻率和從長到寬轉換的更快的方法

計算頻率和從長到寬轉換的更快的方法

慕容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條經驗 獲得超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


查看完整回答
反對 回復 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 關注
  • 787 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號