r - 合并不完整的重复行
问题描述
我有一个不完整重复的 df。重复项基于 2 列(日期和 co.name),之后数据不同。我想做的是“掷硬币”并保留两个副本中的一个,因为无法验证哪个是正确的。
我想过按日期和 co.name 对数据框进行子集化,然后将其合并回原来的,只保留一侧,但想知道是否有更好的方法
dates <- c(rep("2019-06-17", 2), rep("2016-01-11", 2), rep("2016-04-11",2), '2016-04-12', '2016-04-12')
co.name <- c(rep("co1", 2), rep("co2", 2), rep("co1",2), 'co1', 'co2')
total <- c(10,10,15,12,10,9,12,14)
new.products <- c(3,0,4,0,2,0,1,4)
df <-data.frame(dates, co.name, total, new.products)
df
dates co.name total new.products
1 2019-06-17 co1 10 3
2 2019-06-17 co1 10 0
3 2016-01-11 co2 15 4
4 2016-01-11 co2 12 0
5 2016-04-11 co1 10 2
6 2016-04-11 co1 9 0
7 2016-04-12 co1 12 1
8 2016-04-12 co2 14 4
df %>%
group_by(co.name, dates) %>%
filter(n() == 2)
# A tibble: 6 x 4
# Groups: co.name, dates [3]
dates co.name total new.products
<fct> <fct> <dbl> <dbl>
1 2019-06-17 co1 10 3
2 2019-06-17 co1 10 0
3 2016-01-11 co2 15 4
4 2016-01-11 co2 12 0
5 2016-04-11 co1 10 2
6 2016-04-11 co1 9 0
预期输出:
# A tibble: 5 x 4
dates co.name total new.products
<fct> <fct> <dbl> <dbl>
1 2019-06-17 co1 10 0
2 2016-01-11 co2 12 0
3 2016-04-11 co1 9 0
4 2016-04-11 co1 10 2
5 2016-04-11 co1 9 0
或者
# A tibble: 5 x 4
dates co.name total new.products
<fct> <fct> <dbl> <dbl>
1 2019-06-17 co1 10 3
2 2016-01-11 co2 15 4
3 2016-04-11 co1 10 2
4 2016-04-11 co1 10 2
5 2016-04-11 co1 9 0
解决方案
如果我们想sample
在按 'dates'、'co.name' 分组后的一行,我们可以在slice
library(dplyr)
df %>%
group_by(dates, co.name) %>%
slice(sample(row_number(), 1))
或与sample_n
df %>%
group_by(dates, co.name) %>%
sample_n(1)
推荐阅读
- python - Django:AttributeError:模块'todo.views'没有属性'delete_item'
- python - 强制保存具有常量名称的类型对象的抽象类
- javascript - 如何显示另一个模型属性的 angularjs 材料验证?
- maven - 如果失败,请从另一个仓库下载 Jenkins 中的 Maven 工件
- sql - 代码未正确计算 Cast /NullIF
- selenium - 如何在没有任何 href 属性的链接上使用 selenium 获取完全限定的 url?
- swift - 是否可以仅为枚举创建自定义 Swift KeyEncodingStrategy?
- gridview - Yii2 - 动态搜索gridView
- excel - 如何在下面的单元格中浏览特定单元格并打印来自另一个工作簿的数据?
- c# - 如何修复此错误:传递的主键值的数量必须与实体上定义的主键值的数量相匹配