这是我的第一个问题,所以如果我做错了,我提前道歉。我有一个包含 20,000 个观测值和一个虚拟变量 (0, 1) 的数据集。我想删除具有重复值的行,但仅限于值为 1 的行。即,如果我有重复的 0,我想保留它们全部。但如果我重复了 1,我只想保留第一个。我也想按组进行排序。可以吗?
这就是我的数据现在的样子:
在这段摘录中,我想保留从 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()
谢谢!
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