R 如何计算TIBLE或数据帧中的值以生成新的输出表?

R 如何计算TIBLE或数据帧中的值以生成新的输出表?,r,dataframe,tidyverse,tibble,R,Dataframe,Tidyverse,Tibble,我有以下代码: gm <- c("Alex", "Ashton", "Brett", "Chris", "Dave", "Ian", "Jack", "Jon", "Katz", "Mikulich", "Nate", "Todd") year <

我有以下代码:

gm <- c("Alex", "Ashton", "Brett", "Chris", "Dave", "Ian", "Jack", "Jon", "Katz", "Mikulich", "Nate", "Todd")

year <- (2012:2019)

# podium placement, by year
first <- c("Mikulich", "Nate", "Nate", "Chris", "Nate", "Nate", "Dave", "Dave")
second <- c("Jon", "Alex", "Ian", "Todd", "Jon", "Chris", "Jon", "Jon")
third <- c("Katz", "Katz", "Jack", "Dave", "Katz", "Katz", "Chris", "Todd")

podium <- tibble(year, first, second, third)
我希望有一个TIBLE或数据框(12x4),列出每个GM,并将前三名完成的数量计算到输出中,如下所示:

GM         first    second    third
<chr>      <int>    <int>     <int>

Alex       0        1         0
Ashton     0        0         0
Brett      0        0         0
Chris      1        1         1
Dave       2        0         1
Ian        0        1         0
Jack       0        0         1
Jon        0        4         0
Katz       0        0         4
Mikulich   1        0         0
Nate       4        0         0
Todd       0        1         1

我们可以使用
pivot\u longer
将其重塑为“long”格式,然后进行
count
并将其重塑为“wide”

library(dplyr)
library(tidyr)
podium %>%
    pivot_longer(cols = -year, values_to = 'GM') %>%
    count(name, GM) %>% 
    pivot_wider(names_from = name, values_from = n, values_fill = list(n = 0))
# A tibble: 10 x 4
#   GM       first second third
#   <chr>    <int>  <int> <int>
# 1 Chris        1      1     1
# 2 Dave         2      0     1
# 3 Mikulich     1      0     0
# 4 Nate         4      0     0
# 5 Alex         0      1     0
# 6 Ian          0      1     0
# 7 Jon          0      4     0
# 8 Todd         0      1     1
# 9 Jack         0      0     1
#10 Katz         0      0     4
库(dplyr)
图书馆(tidyr)
领奖台%>%
枢轴时间更长(cols=-year,值到='GM')%>%
计数(姓名、总经理)%>%
透视图(名称从=名称,值从=n,值填充=列表(n=0))
#一个tibble:10x4
#通用汽车第一第二第三
#          
#1克里斯11
#2戴夫2 0 1
#3米库利赫1 0 0
#4.4.0
#5亚历克斯0 1 0
#6 Ian 0 1 0
#7乔恩0 4 0
#8托德0 1 1
#9杰克0 1
#10卡兹0 4

谢谢,这帮了大忙!唯一缺少的是,它不包括从未进入前三名的GMs。我希望我不必重新创建一组全新的数据。@根据显示的数据,我只得到10个唯一的元素,即
podium%>%pivot_更长(cols=-year,values_to='GM')%%>%distinct(GM)%%>%nrow.[1]10
你能检查
长度(unique(unlist(podium[-1]))#[1]10
first      n
<chr>      <int>

Chris      1
Dave       2
Mikulich   1
Nate       4
library(dplyr)
library(tidyr)
podium %>%
    pivot_longer(cols = -year, values_to = 'GM') %>%
    count(name, GM) %>% 
    pivot_wider(names_from = name, values_from = n, values_fill = list(n = 0))
# A tibble: 10 x 4
#   GM       first second third
#   <chr>    <int>  <int> <int>
# 1 Chris        1      1     1
# 2 Dave         2      0     1
# 3 Mikulich     1      0     0
# 4 Nate         4      0     0
# 5 Alex         0      1     0
# 6 Ian          0      1     0
# 7 Jon          0      4     0
# 8 Todd         0      1     1
# 9 Jack         0      0     1
#10 Katz         0      0     4