将大型数据集分组为特定标准

Posted

技术标签:

【中文标题】将大型数据集分组为特定标准【英文标题】:Grouping large datasets into specific criteria 【发布时间】:2018-06-21 08:14:20 【问题描述】:

我正在尝试组织大量渠道数据集并将它们分组为特定标准。

例如给定数据框中的一列

Channel_List       
Nat Geo
Discovery
CNBC
CNN
HBO
Fox HD
Cartoon Network

目标是将以下频道组织并标记到其特定组中,并在与其频道相对应的单独列上。例如,理想的输出是

Channel_List        Genre 
Nat Geo             Documentary
Discovery           Documentary
CNBC                News
CNN                 News
HBO                 Entertainment
Fox HD              Entertainment
Cartoon Network     Entertainment

我是否必须使用 if() 和硬编码到 R 代码中的等式语句来将每个频道等同于其特定类型?最好和最有效的方法是什么?谢谢。

【问题讨论】:

替代方案:手动创建一个包含所有唯一 Channel_List 及其类型的查找表,然后对您的数据和查找表执行(左)连接。 您有使用查找的代码示例吗?但是,我尝试使用表查找,因为在这种情况下,3 种类型的类型数量少于频道数量。使用“match data.frame”有错误,因为channel_list(7个频道)的数据数和流派数(3个流派)不同。 了解左连接 【参考方案1】:

if 的替代方案是 dplyrcase_when()

df <- data.frame( Channel_List = c("Nat Geo" , "Discovery", "CNBC", "CNN", "HBO", "Fox HD", "Cartoon Network"), stringsAsFactors = FALSE)

library(dplyr)
#create vectors with channels per group
documentary.v <- c( "Nat Geo", "Discovery" )
news.v <- c( "CNBC", "CNN" )
entertainment.v <- c( "HBO", "Fox HD", "Cartoon Network" )
#use case_when to determine in which Genre the channel_list belongs
df %>% mutate( Genre = case_when( Channel_List %in% documentary.v ~ "Documentary",
                                  Channel_List %in% news.v ~ "News",
                                  Channel_List %in% entertainment.v ~ "Entertainment",
                                  TRUE ~ NA_character_)
               )

#      Channel_List         Genre
# 1         Nat Geo   Documentary
# 2       Discovery   Documentary
# 3            CNBC          News
# 4             CNN          News
# 5             HBO Entertainment
# 6          Fox HD Entertainment
# 7 Cartoon Network Entertainment

【讨论】:

以上是关于将大型数据集分组为特定标准的主要内容,如果未能解决你的问题,请参考以下文章

MySQL (Workbench) 对大型数据集 (30GB) 的操作分组

将文件作为 TAPE 数据集 SFTP 到大型机

大型数据集的自动完成优化

如何使用Python将K均值中的彩色分组标签返回到数据集?

如何将集合分组为数据集上的运算符/方法?

如何将 birt 数据集列拆分为多行