我有一个不完整重复的df。重复项基于2列(日期和公司名称),此后数据有所不同。我想做的是“掷硬币”并保留2个重复项之一,因为没有办法验证哪个正确。
我曾经考虑过通过日期和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
答案 0 :(得分:0)
如果要在按“日期”,“公司名称”分组后sample
行,可以在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)