繁体   English   中英

汇总包含R中特定字符串的行

[英]Summing over rows containing particular strings in R

我有一个数据框,其中第一列包含广告系列的名称。 我需要汇总广告系列名称包含某些字符串的所有行(它可以出现在名称中的不同位置,即有时出现在开头,有时出现在结尾)。 数据框看起来像这样:

    Campaign          Impressions    
1   Local display     1661246 
2   Local text        1029724 
3   National display  325832 
4   National Audio    498900 
5   Audio local        597339 
6   TV Regional        597339
...  

因此,在这种情况下,我想将包含“本地”的所有行汇总为一行,将“国家”汇总为一行,将“区域”汇总为一行,如下所示:

    Campaign     Impressions    
1   Local        939293929
2   National     9232423423
2   Regional     1123123123

如何做到这一点? 我一直在尝试ddply,但没有成功。

您可以使用grep在循环( lapply )中找到与Campaign列类别(“ Local”,“ National”,“ Regional”)匹配的行。 根据grep子集数据集('df'),然后对“印象”列sum ,然后rbind列表元素。

res1 <- do.call(rbind,lapply(c('Local', 'National', 'Regional'),
               function(x) {
         x1 <- df[grep(x, df$Campaign, ignore.case=TRUE),]
        data.frame(Campaign= x, Impressions=sum(x1$Impressions))}))

或使用data.table 仅在“类别”中使用sub保留“本地”,“国家”,“地区”,并将其用作“分组”变量以对“印象”列求和。

library(data.table)
setDT(df)[, list(Impressions=sum(Impressions)),by=
   list(Category=sub('.*?(Local|National|Region).*','\\U\\1', Campaign, 
   ignore.case=TRUE, perl=TRUE))]

数据

df <- structure(list(Campaign = c("Local display", "Local text", 
"National display", 
"National Audio", "Audio local", "TV Regional"), Impressions = 
c(1661246L, 1029724L, 325832L, 498900L, 597339L, 597339L)), .Names = 
c("Campaign", "Impressions"), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))

我猜你应该使用grep函数:比如说你的data.frame叫做mydata

本地= grep(mydata $ Campaign,模式=“本地”)

国家= grep(mydata $ Campaign,模式=“国家”)

区域= grep(mydata $ Campaign,模式=“区域”)

mydata_sum = data.frame(广告系列= c(“本地”,“国家”,“区域”),印象数= c(sum(mydata $ Impressions [Local]),sum(mydata $ Impressions [National]),sum(mydata $印象[区域])))

这是我使用dplyr的方法:

library(dplyr)
library(stringr)

categories <- "Local|National|Regional"

mydf %>% 
  mutate(Campaign = tolower(str_extract((Campaign), ignore.case(categories)))) %>%
  group_by(Campaign) %>%
  summarise(sum(Impressions))

在提取字符串之后,我需要添加tolower,以确保group_by将“ local”与“ Local”一起分组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM