将大型数据集分组为特定标准
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
的替代方案是 dplyr
的 case_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
【讨论】:
以上是关于将大型数据集分组为特定标准的主要内容,如果未能解决你的问题,请参考以下文章