r - 按名称分组并将 r 中的列数相加
问题描述
我有一个包含 405 个观察值和 39 个变量的数据集。但是只有两列对于进一步分析很重要。
我想将具有相似名称的第一行组合在一起,并从第二列中将它们的编号相加。
可重现的数据集如下所示:
df1 <- data.frame(name=c("Google Ads", "Google Doubleclick","Facebook Login",
"Facebook Ads","Twitter MoPub","Flurry","Amazon advertisment","Microsoft ","Ad4screen","imobi"),
value=c(10,20,30,40,50,60,70,80,90,100),unimportant=c(1,2,3,4,5,6,7,8,9,10))
结果应该在一个新的 data.frame 中,如下所示:
df2 <- data.frame (name=c("Google","Facebook","Twitter","Flurry","Amazon","Microsoft","Others"),
value=c(30,70,50,60,70,80,190))
解决方案
一种tidyverse
方法。
- 首先将所有有效名称存储在一个向量中说
valid_names
- 此后创建一个新列
all_names
,例如df1
-- 首先
' '
使用分割空间中的所有字符串str_split
- 此后用于
purrr::map_chr()
检查是否有任何拆分字符串与您的匹配,valid_names
如果是,则仅检索该字符串,否则获取others
- 首先
- 此后
group_by
在这个领域。(我先省略了一步mutate,然后group_by
直接在group_by语句中创建了新字段,有效) - 现在根据需要总结您的
important
价值观。
valid_names =c("Google","Facebook","Twitter","Flurry","Amazon","Microsoft")
valid_names
#> [1] "Google" "Facebook" "Twitter" "Flurry" "Amazon" "Microsoft"
df1 <- data.frame(name=c("Google Ads", "Google Doubleclick","Facebook Login",
"Facebook Ads","Twitter MoPub","Flurry","Amazon advertisment","Microsoft ","Ad4screen","imobi"),
value=c(10,20,30,40,50,60,70,80,90,100),unimportant=c(1,2,3,4,5,6,7,8,9,10))
df1
#> name value unimportant
#> 1 Google Ads 10 1
#> 2 Google Doubleclick 20 2
#> 3 Facebook Login 30 3
#> 4 Facebook Ads 40 4
#> 5 Twitter MoPub 50 5
#> 6 Flurry 60 6
#> 7 Amazon advertisment 70 7
#> 8 Microsoft 80 8
#> 9 Ad4screen 90 9
#> 10 imobi 100 10
library(tidyverse)
df1 %>% group_by(all_names = str_split(name, ' '),
all_names = map_chr(all_names, ~ ifelse(any(.x %in% valid_names),.x[.x %in% valid_names], 'others'))) %>%
summarise(value = sum(value), .groups = 'drop')
#> # A tibble: 7 x 2
#> all_names value
#> <chr> <dbl>
#> 1 Amazon 70
#> 2 Facebook 70
#> 3 Flurry 60
#> 4 Google 30
#> 5 Microsoft 80
#> 6 others 190
#> 7 Twitter 50
由reprex 包(v2.0.0)于 2021-06-22 创建
推荐阅读
- reactjs - 使用电子反应样板为电子应用程序构建编写自动化测试用例
- apache - 组可能存在或不存在的 RewriteRule
- vue.js - Vuex:当瞬间内的对象具有属性更改时,是否可以直接从 vue 瞬间改变状态对象?
- javascript - mongodb 从多个文档中删除特定的数组项(nodejs)
- python - 在预测一天之前初始化 LSTM 状态
- android - 即使应用程序关闭,如何在前台显示推送通知?
- winforms - Crystal Reports 13 具有基于使用 IBM DB2 的命令的动态参数
- sql - 如何在已使用 sql 预订的预订房间列表中获得空闲时间
- ajax - 通过渐进式 Web 应用程序 (PWA) 使用 Web API
- c++ - 如何在 Microsoft Visual Studio 之外构建 C++ 代码