首页 > 解决方案 > 如何计算数据框列的不同值并排序到新数据框?由所述数据框的每几行分隔

问题描述

我有一个投球数据框,想计算每个板外观的每个球数和击球数。数据框包含按比赛和每场比赛的板外观以及每个板外观内的球场数量进行的投球,但没有分成单独的板外观。我想创建一个新的数据框,其中列出了每个板的外观以及投出的球数和击球数。

我尝试了一些循环,但没有成功分离数据并将其存储到新的数据框中。我只能打印每个板外观的结果。我将每个游戏分成每个游戏的数据框,但假设有一种方法可以做到这一点,而无需为每个游戏创建子集。

Team.pitchlog 是一个数据框,其中包含游戏 ID 列,表示球场来自哪个游戏,AB # 表示板外观编号(是的,AB 而不是 PA 是一个错误,但由于所有数据框都使用它,所以我没有更改列标题然而)并且每一行都是它自己的投球,并带有一个结果列,指示投球是球还是罢工。

Team.gm1=子集(Team.pitchlog,Team.pitchlog$ Game ID==1)

for (i in 1:39) { print (count(Team.gm1$Result[Team.gm1$ AB #==i])) }

我希望有一个数据框,每行是一个板外观和游戏 ID、板外观 ID 的列以及球和罢工的列。

标签: r

解决方案


这是一个选项tidyversefilter'Game ID' 为 1 的行,然后根据 'AB #' 的值将数据集拆分为一个list数据集,并通过循环获得 '​​Result' 的list频率map

library(tidyverse)
Team.pitchlog %>%
       filter(`Game ID` == 1) %>%
       select(`AB #`, Result) %>%
       mutate(Result = factor(Result)) %>%
       group_split(`AB #`) %>%
       map(~ .x %>%
                count(Result, .drop = FALSE))

在 OP 的帖子中,count(from dplyr) 应用于 avector作为输入,而 give 的帮助页面?count将输入 'x' 指定为

x - 一个 tbl() 来计数/计数。

如果我们想使用相同的语法,一个选项是table从中base R可以获取一个向量

for (i in 1:39) print (table(Team.gm1$Result[Team.gm1$`AB #`==i])) 

推荐阅读