r - 如何过滤掉每个组的重复行
问题描述
所以这是我正在使用的数据:
ID Year State Grade Loss Total
1 2016 AZ A 50 1000
1 2016 AZ A 50 1000
2 2016 AZ B 0 5000
3 2017 AZ A 0 2000
4 2017 AZ C 10 100
2 2017 AZ B 0 3000
我要做的是创建一个表格,显示按年份、州和年级分组的价值损失量。我已经完成了那部分,但问题是您可以看到 ID=1 存在重复的行。一旦我按年份、州和年级对数据进行分组,我需要在我的代码中添加一个组件,以删除数据中的任何重复行。
在对数据进行分组后,我想删除重复项的原因是 ID 号可能会在不同年份重复,但这没关系,因为这是一个新的观察结果。如果年份、州和年级匹配,我只想删除任何重复项。基本上,如果整行是重复的,则应将其删除。
我不知道我是否应该使用 Unique() 或 Distinct() 但这是我目前所拥有的:
Answer <- data %>%
group_by(Year, State, Grade) %>%
filter(row_number(ID) == 1) %>% #This is the part to replace
summarise(x = sum(Loss) / sum(Total)) %>%
spread(State, x)
输出应如下所示:
Year State Grade x
2016 AZ A 0.05
2016 AZ B 0
2016 AZ C 0
2017 AZ A 0
2017 AZ B 0
2017 AZ C 0.1
解决方案
一些东西。下面,我distinct
用来删除重复的行。此外,在您的预期结果中,您有一个 2016 年的 C 级条目,这不在您的原始数据中。因此,我曾经complete
将此(以及任何其他缺失的情况)添加为零。最后,正如上面@akrun 所说:0.00833
从哪里来?错字还是我误解了计算?
df <- read.table(text = "ID Year State Grade Loss Total
1 2016 AZ A 50 1000
1 2016 AZ A 50 1000
2 2016 AZ B 0 5000
3 2017 AZ A 0 2000
4 2017 AZ C 10 100
2 2017 AZ B 0 3000", header = TRUE)
Answer <- df %>%
distinct %>%
group_by(Year, State, Grade) %>%
summarise(x = sum(Loss) / sum(Total)) %>%
complete(Year, State, Grade, fill = list(x = 0))
# # A tibble: 6 x 4
# # Groups: Year, State [2]
# Year State Grade x
# <int> <fct> <fct> <dbl>
# 1 2016 AZ A 0.05
# 2 2016 AZ B 0
# 3 2016 AZ C 0
# 4 2017 AZ A 0
# 5 2017 AZ B 0
# 6 2017 AZ C 0.1
推荐阅读
- php - Alamofire and PHP Upload Images
- internet-explorer - Internet Explorer 无法在 flex-box 内正确缩放 svg
- enaml - [Enaml][py36]:订阅运算符不会触发“可见”观察者
- python - Pickle breaking change in Python 3.7
- python - 无法在 django 中使用电子邮件登录
- python - 用beautifulsoup在表中搜索字符串并打印标题
- mongodb - 查询上限集合时出现 MongoDB 错误
- powershell - Azure DevOps - Setting and Using Variables in PowerShell Scripts
- javascript - HTML 按钮可能与 JavaScript 函数冲突?
- c - Constructing and returning Julia types in C