根据因子变量删除 R 中的重复行
Removing duplicate rows in R based upon a factor variable
我正在尝试根据因子变量的存在删除重复的行。如果重复行中的因子变量显示 desired,而不是 not desired,我想保留该行并删除另一行。所需的因子有时会出现在第一个副本中,有时会出现在第二个副本中。
此外,有一个列从三十天开始计算,一旦需要或不需要弹出。在没有类型(NA)的情况下,duplicate flag 列也会显示 NA。
最后,每个品牌每天应该有 1 行。
手头的数据样本:
brand date sales orders customers type duplicate_flag
A 10/1/2018 100 5 4 NA NA
A 10/2/2018 150 8 6 desired 1
A 10/2/2018 150 8 6 not desired 1
A 10/3/2018 110 5 4 NA 2
期望的输出:
brand date sales orders customers type duplicate_flag
A 10/1/2018 100 5 4 NA NA
A 10/2/2018 150 8 6 desired 1
A 10/3/2018 110 5 4 NA 2
如果有办法在 dplyr 中做到这一点,那就太好了。
谢谢!
我假设你的数据框是 "df"
df %>% filter(type != "not desired" | is.na(type))
或者
df %>% select(-type) %>% distinct()
这里有一些可用的示例数据。
df <-
data_frame(
Date = c(1,2,2,3,3,4)
, Metric = 1:6
, type = c(NA, "desired", "not desired", "not desired", "desired", "not desired")
)
看起来像:
# A tibble: 6 x 3
Date Metric type
<dbl> <int> <chr>
1 1 1 <NA>
2 2 2 desired
3 2 3 not desired
4 3 4 not desired
5 3 5 desired
6 4 6 not desired
我假设您希望基于 type
列,每个日期保留一行,但其他列可能(或可能不)彼此不同。 (如果它们彼此之间没有区别,我不明白为什么保留哪一行很重要。)
为此,最简单的方法可能是按 type
对数据进行排序(确保要保留的值排在第一位——您可能必须将 type
更改为具有"desired" 值作为第一级(如果由于某种原因它不是按字母顺序排列的第一级)然后使用 slice
保留第一个条目。
df %>%
arrange(type) %>%
group_by(Date) %>%
slice(1) %>%
ungroup() %>%
arrange(Date)
returns:
# A tibble: 4 x 3
Date Metric type
<dbl> <int> <chr>
1 1 1 <NA>
2 2 2 desired
3 3 5 desired
4 4 6 not desired
我正在尝试根据因子变量的存在删除重复的行。如果重复行中的因子变量显示 desired,而不是 not desired,我想保留该行并删除另一行。所需的因子有时会出现在第一个副本中,有时会出现在第二个副本中。
此外,有一个列从三十天开始计算,一旦需要或不需要弹出。在没有类型(NA)的情况下,duplicate flag 列也会显示 NA。
最后,每个品牌每天应该有 1 行。
手头的数据样本:
brand date sales orders customers type duplicate_flag
A 10/1/2018 100 5 4 NA NA
A 10/2/2018 150 8 6 desired 1
A 10/2/2018 150 8 6 not desired 1
A 10/3/2018 110 5 4 NA 2
期望的输出:
brand date sales orders customers type duplicate_flag
A 10/1/2018 100 5 4 NA NA
A 10/2/2018 150 8 6 desired 1
A 10/3/2018 110 5 4 NA 2
如果有办法在 dplyr 中做到这一点,那就太好了。
谢谢!
我假设你的数据框是 "df"
df %>% filter(type != "not desired" | is.na(type))
或者
df %>% select(-type) %>% distinct()
这里有一些可用的示例数据。
df <-
data_frame(
Date = c(1,2,2,3,3,4)
, Metric = 1:6
, type = c(NA, "desired", "not desired", "not desired", "desired", "not desired")
)
看起来像:
# A tibble: 6 x 3
Date Metric type
<dbl> <int> <chr>
1 1 1 <NA>
2 2 2 desired
3 2 3 not desired
4 3 4 not desired
5 3 5 desired
6 4 6 not desired
我假设您希望基于 type
列,每个日期保留一行,但其他列可能(或可能不)彼此不同。 (如果它们彼此之间没有区别,我不明白为什么保留哪一行很重要。)
为此,最简单的方法可能是按 type
对数据进行排序(确保要保留的值排在第一位——您可能必须将 type
更改为具有"desired" 值作为第一级(如果由于某种原因它不是按字母顺序排列的第一级)然后使用 slice
保留第一个条目。
df %>%
arrange(type) %>%
group_by(Date) %>%
slice(1) %>%
ungroup() %>%
arrange(Date)
returns:
# A tibble: 4 x 3
Date Metric type
<dbl> <int> <chr>
1 1 1 <NA>
2 2 2 desired
3 3 5 desired
4 4 6 not desired