【发布时间】:2019-09-24 14:48:14
【问题描述】:
我正在使用数据集 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
【问题讨论】:
-
在上述情况下,@PedroGuizar 的预期结果是什么?
-
如果您只关心名称而不关心其他数据,您可以试试
unique(baby.sub$name)。但是,您正在尝试找出哪些名称最受欢迎。在哪一年?适合哪个性别? 总体?如果是,“总体”对您意味着什么? -
您的输出中是否需要
n和prop?如果不使用unique就像 Roman 说的那样,将返回一次所有不同的名称。如果你愿意,你也可以得到一个计数。 -
我在上面的编辑中回复了我想要的结果。我会尝试 unique 和 group_by
-
@PedroGuizar 是否要将每个名称的所有
n相加,因为n每年都不同?
标签: r