首页 > 解决方案 > 如何在同一数据集中(可能使用 stringr)合并具有相同名称的数据?

问题描述

我正在使用数据集 babynames,我试图找出哪些名字最受欢迎,但我遇到的问题是相同的名字出现了不止一次(因为它是一年中的顶级名字),所以我想了解如何将相同的名称合并为一个,这样我就不会遇到这个问题。

这就是我目前正在使用的(为了不搞砸更大的数据集)。

> baby.sub
# A tibble: 10 x 5
    year sex   name        n   prop
   <dbl> <chr> <chr>   <int>  <dbl>
 1  1947 F     Linda   99686 0.0548
 2  1948 F     Linda   96209 0.0552
 3  1947 M     James   94756 0.0510
 4  1957 M     Michael 92695 0.0424
 5  1947 M     Robert  91642 0.0493
 6  1949 F     Linda   91016 0.0518
 7  1956 M     Michael 90620 0.0423
 8  1958 M     Michael 90520 0.0420
 9  1948 M     James   88588 0.0497
10  1954 M     Michael 88514 0.0428

我试过用这个匹配相同的名字:

baby.sub %>%
  str_match("[:alpha:]")

我懂了:

> baby.sub %>%
+   str_match("[:alpha:]")
     [,1]
[1,] "c" 
[2,] "c" 
[3,] "c" 
[4,] "c" 
[5,] "c" 
Warning message:
In stri_match_first_regex(string, pattern, opts_regex = opts(pattern)) :
  argument is not an atomic vector; coercing

这个 stringr 函数显然不是我要找的那个。有没有人有任何想法?

编辑:

回复评论:@Roman,是的,我只关心名字和 n(命名该名字的婴儿总数),无论年份或性别如何。这就是我试图从代码中得到的

> baby.sub
# A tibble: 10 x 5
    name       n  
    <chr>   <int> 
 1  Michael 362349
 2  Linda    286911
 3  James  183344
 4  Robert   91642
 5  James   88588

EDIT_2:解决了!谢谢!

baby.sub <- babynames %>%
  arrange(-n) %>%
  head(10)

baby.sub %>%
  group_by(name) %>%
  summarize(total.count = sum(n)) %>%
  arrange(-total.count)

name    total.count
  <chr>         <int>
1 Michael      362349
2 Linda        286911
3 James        183344
4 Robert        91642

标签: r

解决方案


您可以使用 group_by 并汇总每个名称的所有计数,如下所示:

library(tidyverse)
library(babynames)

babynames %>% 
  group_by(name) %>% 
  summarise(
  total_count = sum(n)
)

推荐阅读