r - 使用 r dplyr 库在新列中生成聚合数字
问题描述
我正在尝试dplyr
根据现有列中值的聚合在数据框中生成一个新列。鉴于我的数据框:
group1 <- c("2019","2019","2019","2018","2018","2017","2017","2017")
group2 <- c("2019-01-01", "2019-01-01","2019-01-01","2018-05-01","2018-06-01","2017-01-01","2017-01-01","2017-02-01")
group3 <- c("A","A","B","A","A","C","C","B")
df <- data.frame("Year" = group1,"Date" = group2,"Sample" = group3)
给出:
Year Date Sample
1 2019 2019-01-01 A
2 2019 2019-01-01 A
3 2019 2019-01-01 B
4 2018 2018-05-01 A
5 2018 2018-06-01 A
6 2017 2017-01-01 C
7 2017 2017-01-01 C
8 2017 2017-02-01 B
所以我想生成新列“计数”,它为每一行给出每个样本的唯一日期总数。所以对于上述数据,我希望结果是:
Year Date Sample Count
1 2019 2019-01-01 A 1
2 2019 2019-01-01 A 1
3 2019 2019-02-01 B 1
4 2018 2018-05-01 A 2
5 2018 2018-06-01 C 2
6 2017 2017-01-01 C 1
7 2017 2017-01-01 C 1
8 2017 2017-02-01 B 1
我尝试在以下代码中使用r
:
df %>%
group_by(Year) %>%
group_by(Sample) %>%
group_by(Date) %>%
mutate(Count = n_distinct(Date))
但我没有得到正确的答案!
解决方案
你可以试试:
library(dplyr)
df %>%
group_by(Year, Sample) %>%
mutate(Count = n_distinct(Date))
如果要将多个变量传递给group_by
,则需要将它们放在一起 - 您所做的是通过每个新语句取消先前的分组。
此外,如果您想计算唯一日期,则不应按它们分组。
上面的代码将给出:
# A tibble: 8 x 4
# Groups: Year, Sample [6]
Year Date Sample Count
<fct> <fct> <fct> <int>
1 2019 2019-01-01 A 1
2 2019 2019-01-01 A 1
3 2019 2019-01-01 B 1
4 2018 2018-05-01 A 2
5 2018 2018-06-01 A 2
6 2018 2017-01-01 C 1
7 2017 2017-01-01 C 1
8 2017 2017-02-01 B 1
请注意,您生成的数据框与您向我们展示的数据框不匹配。您的代码生成的数据框是:
Year Date Sample
1 2019 2019-01-01 A
2 2019 2019-01-01 A
3 2019 2019-01-01 B
4 2018 2018-05-01 A
5 2018 2018-06-01 A
6 2018 2017-01-01 C
7 2017 2017-01-01 C
8 2017 2017-02-01 B
在给定的情况下,确实只有Sample
2 个不同Date
的 sYear
是A
(2018 年)。
推荐阅读
- smartsheet-api - 有没有办法使用 REST API 获取 SmartSheet 表单?
- android-emulator - Android模拟器不会启动找不到的东西
- html - 无法删除导航栏和横幅 css 之间的填充
- android - 在 NavigationView 抽屉中显示图像
- jenkins - 在步骤中找不到这样的 DSL 方法“publishHTML”
- c# - .NET MVC Razor 发布操作-“/”中的服务器错误
- c# - C# Serial Port 提供不需要的 IRP 消息
- java - 用户定义函数的困难
- regex - 如何正确使用 char negation [^ ] 来做单词非固定宽度向后看?
- ember.js - Ember js 导入一个UMD节点模块