如何删除特定值的重复行?

问题描述 投票:0回答:1

这是我的第一个问题,所以如果我做错了,我提前道歉。我有一个包含 20,000 个观测值和一个虚拟变量 (0, 1) 的数据集。我想删除具有重复值的行,但仅限于值为 1 的行。即,如果我有重复的 0,我想保留它们全部。但如果我重复了 1,我只想保留第一个。我也想按组进行排序。可以吗?

这就是我的数据现在的样子:

This is how my data looks now:

在这段摘录中,我想保留从 1920 年到 1922 年的所有数据,删除从 1923 年到 1929 年的行,并保留剩余的观察结果。

这是我到目前为止所尝试过的,但它会删除第一个 1 之后的所有观察结果,包括值为 o 0 的行。

df %>%
  arrange(country, year) %>% 
  group_by(country) %>% 
  slice(if(1 %in% event) seq(match(1, event)) else row_number()) %>% 
  ungroup()

谢谢!

r database duplicates survival-analysis recurring-events
1个回答
0
投票

在基础 R 中,您可以使用修改后的

sequence(rle(...))
方法来识别
event
的连续实例,并使用一些附加逻辑来满足您的特定需求:

df[!(df$event == 1 & 
       sequence(rle(as.character(df$event))$lengths) > 1),]

#     country year event
# 1 Argentina 1920     0
# 2 Argentina 1921     0
# 3 Argentina 1922     1
# 4 Argentina 1930     0
# 5 Argentina 1931     0
# 6 Argentina 1932     0
# 7 Argentina 1933     0
# 8 Argentina 1934     0
# 9 Argentina 1935     0

# or the dplyr approach
library(dplyr)
df %>% filter(!(event == 1 & sequence(rle(as.character(event))$lengths) > 1))

如果您想按国家/地区进行操作,您可能需要使用

dplyr
方法和
.by = country
:

library(dplyr)
df %>%
  filter(!(event == 1 & sequence(rle(as.character(event))$lengths) > 1),
         .by = country)

#     country year event
# 1 Argentina 1920     0
# 2 Argentina 1921     0
# 3 Argentina 1922     1
# 4 Argentina 1930     0
# 5 Argentina 1931     0
# 6 Argentina 1932     0
# 7 Argentina 1933     0
# 8 Argentina 1934     0
# 9 Argentina 1935     0
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.