R 基于变量值删除具有相同名称的观测值

R 基于变量值删除具有相同名称的观测值,r,tidyverse,data-cleaning,R,Tidyverse,Data Cleaning,我的数据框看起来像这样 name variable1 variable2 variable3 a 10001 b 10002 c 10003 d 10004 a 10005 e 10006 f 10007 g 10008 b 10009 h 10010 i 10011 a 10012 在这个数据框架中,我想删除具有相同名

我的数据框看起来像这样

name  variable1  variable2  variable3
a        10001
b        10002
c        10003
d        10004
a        10005
e        10006
f        10007
g        10008
b        10009
h        10010
i        10011
a        10012

在这个数据框架中,我想删除具有相同名称的观测值,这些观测值之间的距离最多为10个variable1值,因为我假设它们是双计数。因此,在上面的示例中,我希望删除第二个a和第二个b,但不删除第三个a。我有什么办法可以做到吗?

你可以试试

library(dplyr)

df %>%
 group_by(name) %>% 
 mutate(new = variable1 - first(variable1)) %>% 
 filter(new >= 10 | new == 0) %>% 
 select(-new)

# A tibble: 10 x 2
# Groups:   name [9]
#   name  variable1
#   <fct>     <int>
# 1 a         10001
# 2 b         10002
# 3 c         10003
# 4 d         10004
# 5 e         10006
# 6 f         10007
# 7 g         10008
# 8 h         10010
# 9 i         10011
#10 a         10012
您可以按名称和变量1排列数据,并为每个名称选择连续行之间差异大于10的行

library(dplyr)
df %>%
  arrange(name, variable1) %>%
  group_by(name) %>%
  filter(c(TRUE, diff(variable1) > 10))

#  name  variable1
#  <chr>     <int>
#1 a         10001
#2 b         10002
#3 c         10003
#4 d         10004
#5 e         10006
#6 f         10007
#7 g         10008
#8 h         10010
#9 i         10011

您说您想相互删除10个variable1值,但第三个a 10012和第二个a 10005之间的差值小于10。你为什么不把它拿走?这是一个很好的观点。我想如果第三个a也被移除也可以。每个a之间应该至少有10个值的差距。你的描述不是很清楚,因此你得到了两个不同的答案。是的,我的问题可以更清楚一点,这是真的。第一个Sotos答案包含第三个a,Ronak的答案不包含第三个a,我说的对吗?是的,Sotos答案与每个名字的变量1的第一个值进行比较,如果差值为0或大于10,则选择行,因此在他的答案中得到第三个a,因为10012-10001大于10。而在我的回答中,它将每个值与下一个值进行比较,并且仅当差值大于10时才进行选择,因此我不会在输出中得到第三个a,因为10012-10005小于10。