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