【问题标题】:Grouping by individual contents of a column with grepl/dplyr使用 grepl/dplyr 按列的单个内容分组
【发布时间】:2019-08-28 21:48:11
【问题描述】:

在第一张表中,我有一个完整数据框的样本。这已被查询过滤:

harden <- rockets %>% filter(grepl("Harden", rockets_lineup))

在第二张表中,当我按“game_id”分组,然后总结“play_length”列时,除以 60 后得到这些结果。完美,我基本上有詹姆斯哈登在“rockets_lineup”中的总时间柱子。这是一个坚实的开始,但我想更进一步。理想情况下,我想获得“rockets_lineup”列中其他玩家的 play_length 总和,以及其他总和。那么之前的步骤是按game_id分组,然后按我想的grepl分组?我该怎么办?表 3 具有预期的结果。

(数字基于整个数据框,如果你的不匹配,没关系)

workbook

【问题讨论】:

  • 您可以使用它的一种方法是使用data.table 并将所有玩家分成他们自己的行。确保该列是带有harden$away_lineup = as.character(harden$away_lineup) 的字符,然后执行setDT(harden)[, list(away_lineup = unlist(strsplit(away_lineup, ","))), by = setdiff(names(harden), "away_lineup")]。您可能还需要为 home_lineup 列执行此操作,具体取决于您的数据集。
  • 请不要链接到问题中的文件:链接可能会过时,当他们这样做时,这个问题变得(更多)无法重现。通常最好使用dput(head(x))data.frame(...) 为我们提供明确的数据样本(如果有很多列,则仅包含相关列)。 (由于多种原因,使用str 或控制台输出通常是不够的。)您能否在一个小框架中提供几行中的几行,然后将该采样器框架的dput(head(x)) 的输出粘贴到您的问题。谢谢!
  • @sumshyftw 我收到此错误 dimnames(x) 中的错误

标签: r dplyr grepl


【解决方案1】:

我想我对你的问题有一个解决方案。使用来自 dplyr 的 separate_rows 函数。

您需要做的是将变量 away_lineup 分成几行,其中每个新观察都是原始观察的副本,允许您按 away_lineupgame_id 分组以获得您已经对詹姆斯哈登所做的总结

试试这个代码。

librar(tidyverse)

data %>%
  separate_rows(away_lineup, sep = ',') %>%
  mutate(away_lineup = str_trim(away_lineup),
         play_length = parse_number(play_length)) %>% 
  group_by(game_id, away_lineup) %>%
  summarise(minute = sum(play_length)/60)

数据

data <- structure(list(away_lineup = c("James Harden, Carmelo Anthony, Eric Gordon, Michael Carter-Williams, PJ Tucker", 
"Clint Capela, James Harden, Carmelo Anthony, Eric Gordon, Michael Carter-Williams", 
"Clint Capela, James Harden, Carmelo Anthony, Eric Gordon, Michael Carter-Williams", 
"Clint Capela, James Harden, Carmelo Anthony, Eric Gordon, Michael Carter-Williams", 
"James Ennis III, Clint Capela, Eric Gordon, James Harden, Carmelo Anthony", 
"James Ennis III, Clint Capela, Eric Gordon, James Harden, Carmelo Anthony", 
"James Ennis III, Clint Capela, Eric Gordon, James Harden, Carmelo Anthony", 
"James Ennis III, Clint Capela, Eric Gordon, James Harden, Carmelo Anthony", 
"Clint Capela, Eric Gordon, James Harden, Carmelo Anthony, Gerald Green", 
"Clint Capela, Eric Gordon, James Harden, Carmelo Anthony, Gerald Green", 
"James Harden, Eric Gordon, Gary Clark, Isaiah Hartenstein, Chris Paul", 
"James Harden, Eric Gordon, Gary Clark, Isaiah Hartenstein, Chris Paul", 
"James Harden, Eric Gordon, Gary Clark, Isaiah Hartenstein, Chris Paul", 
"James Harden, Eric Gordon, Gary Clark, Isaiah Hartenstein, Chris Paul", 
"James Harden, Eric Gordon, Gary Clark, Isaiah Hartenstein, Chris Paul", 
"James Harden, Eric Gordon, Gary Clark, Isaiah Hartenstein, Chris Paul", 
"James Harden, Eric Gordon, Gary Clark, Isaiah Hartenstein, Chris Paul", 
"PJ Tucker, Clint Capela, James Harden, Austin Rivers, Gerald Green", 
"PJ Tucker, Clint Capela, James Harden, Austin Rivers, Gerald Green", 
"PJ Tucker, Clint Capela, James Harden, Austin Rivers, Gerald Green", 
"PJ Tucker, Clint Capela, James Harden, Austin Rivers, Gerald Green", 
"PJ Tucker, Clint Capela, James Harden, Austin Rivers, Gerald Green", 
"PJ Tucker, Clint Capela, James Harden, Austin Rivers, Gerald Green", 
"PJ Tucker, Clint Capela, James Harden, Austin Rivers, Gerald Green", 
"Danuel House Jr., Austin Rivers, Gerald Green, James Harden, PJ Tucker", 
"Danuel House Jr., Austin Rivers, Gerald Green, James Harden, PJ Tucker", 
"Danuel House Jr., Austin Rivers, Gerald Green, James Harden, PJ Tucker", 
"Danuel House Jr., Austin Rivers, Gerald Green, James Harden, PJ Tucker", 
"Danuel House Jr., Austin Rivers, Gerald Green, James Harden, PJ Tucker", 
"PJ Tucker, James Harden, Gerald Green, Danuel House Jr., James Ennis III", 
"PJ Tucker, James Harden, Gerald Green, Danuel House Jr., James Ennis III", 
"PJ Tucker, James Harden, Gerald Green, Danuel House Jr., James Ennis III", 
"PJ Tucker, James Harden, Gerald Green, Danuel House Jr., James Ennis III"
), play_length = c("0S", "13S", "9S", "4S", "19S", "6S", "8S", 
"0S", "0S", "18S", "11S", "9S", "13S", "12S", "3S", "7S", "5S", 
"7S", "24S", "9S", "19S", "7S", "19S", "16S", "17S", "2S", "15S", 
"3S", "2S", "1S", "9S", "2S", "2S"), game_id = c(21800009, 21800009, 
21800009, 21800009, 21800039, 21800039, 21800039, 21800039, 21800039, 
21800039, 21800180, 21800180, 21800180, 21800180, 21800180, 21800180, 
21800180, 21800512, 21800512, 21800512, 21800512, 21800512, 21800512, 
21800512, 21800565, 21800565, 21800565, 21800565, 21800565, 21800610, 
21800610, 21800610, 21800610)), row.names = c(NA, -33L), class = c("tbl_df", 
"tbl", "data.frame"))

请告诉我是否是您想要的。

【讨论】:

  • 我收到此错误:parse_vector(x, col_number(), na = na, locale = locale, trim_ws = trim_ws) 错误:is.character(x) 不正确
  • 我用我使用的数据更新了答案,我只保留了任务的相关变量。
猜你喜欢
  • 2020-01-23
  • 1970-01-01
  • 2018-12-22
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 2016-12-31
  • 2022-01-15
相关资源
最近更新 更多