将列吐入多列

时间:2019-06-02 02:33:35

标签: r split aggregate

data = data.frame("id"=1:40,
                  "group"=1:5,
                  "score"=sample(1:4,10,r=T))
table(data[which(data$group==1),]$score)
WANT=data.frame("group"=1:5,
                  "score1"=c(0,4,0,4,0),
                  "score2"=c(4,0,0,4,0),
                  "score3"=c(0,4,0,4,0),
                  "score4"=c(0,0,4,4,0))

在数据中,我有“得分”,但我想为每个“得分”分别创建一列,然后按如下所示进行汇总。

我还希望拥有完整的数据帧“ WANT”,如果没有人,则将0设置为0,否则在行方面保持相同的结构。

1 个答案:

答案 0 :(得分:0)

通过“组”和“得分”获得spread或频率后,选项为count

library(tidyverse)
data %>% 
    count(group, score) %>%
    mutate(score = str_c("score", score)) %>%
    spread(score, n, fill = 0)

如果我们想使用count之后的所有组合,请使用complete

data %>% 
  count(group, score) %>% 
  complete(group, score, fill = list(n = 0))

我还希望拥有完整的数据帧“ WANT”,如果没有人,则将0设置为0,否则在行方面保持相同的结构。