R 查找并删除不同ID中的日期顺序间隙
我有一个数据框,其中包含来自continuus days的不同ID和obervations。如果连续几天没有一个ID的数据,我想删除它们 我使用R 查找并删除不同ID中的日期顺序间隙,r,sorting,difference,days,R,Sorting,Difference,Days,我有一个数据框,其中包含来自continuus days的不同ID和obervations。如果连续几天没有一个ID的数据,我想删除它们 我使用diff(days)函数来显示日与日之间的差异,但我只能对一个ID执行此操作 我的df看起来像这样: ani_id_year days 1 ID468_2006 2006-04-01 2 ID468_2006 2006-04-02 3 ID468_2006 2006-04-03 4 ID468_2006 2006-04-04 5
diff(days)
函数来显示日与日之间的差异,但我只能对一个ID执行此操作
我的df看起来像这样:
ani_id_year days
1 ID468_2006 2006-04-01
2 ID468_2006 2006-04-02
3 ID468_2006 2006-04-03
4 ID468_2006 2006-04-04
5 ID468_2006 2006-04-05
6 ID599_2006 2006-03-06
7 ID599_2006 2006-03-14
8 ID599_2006 2006-03-15
9 ID599_2006 2006-03-16
因此,我可以看到,ID599_2006中存在7天的间隔,如果gab为=,我想自动删除它。如果您希望删除每个ID的所有条目,这将是一种方法
库(tidyverse)
df%集团成员(ani id年)%>%
变异(差异=as.numeric(天-滞后(天)))%>%
变异(to_delete=ifelse)(最大值(差值,na.rm=TRUE)%
过滤器(要删除==“保留”)
#>#A tibble:5 x 4
#>#群体:ani_id_年[1]
#>要删除的年度天数差异
#>
#>1 ID468_2006-04-01不适用
#>2 ID468_2006-04-02 1保留
#>3 ID468_2006-04-03 1保留
#>4 ID468_2006-04-04 1保持
#>5 ID468_2006-04-05 1
由(v0.3.0)于2020-08-18创建。如果您希望删除每个ID的所有条目,这将是一种方法
库(tidyverse)
df%集团成员(ani id年)%>%
变异(差异=as.numeric(天-滞后(天)))%>%
变异(to_delete=ifelse)(最大值(差值,na.rm=TRUE)%
过滤器(要删除==“保留”)
#>#A tibble:5 x 4
#>#群体:ani_id_年[1]
#>要删除的年度天数差异
#>
#>1 ID468_2006-04-01不适用
#>2 ID468_2006-04-02 1保留
#>3 ID468_2006-04-03 1保留
#>4 ID468_2006-04-04 1保持
#>5 ID468_2006-04-05 1
由(v0.3.0)于2020年8月18日创建
subset(df, !ani_id_year %in% ani_id_year[c(F, diff(days) > 7)])
library(dplyr)
2.
dplyr
解决方案
subset(df, !ani_id_year %in% ani_id_year[c(F, diff(days) > 7)])
library(dplyr)
- 选项1
- 选项2
输出
数据
df1.base
solution
subset(df, !ani_id_year %in% ani_id_year[c(F, diff(days) > 7)])
library(dplyr)
2.dplyr
解决方案
subset(df, !ani_id_year %in% ani_id_year[c(F, diff(days) > 7)])
library(dplyr)
- 选项1
- 选项2
输出
数据
df带有data.table的选项
library(data.table)
setDT(df)[, .SD[!any(diff(days) > 7)], (ani_id_year)]
# ani_id_year days
#1: ID468_2006 2006-04-01
#2: ID468_2006 2006-04-02
#3: ID468_2006 2006-04-03
#4: ID468_2006 2006-04-04
#5: ID468_2006 2006-04-05
数据
df带有data.table的选项
library(data.table)
setDT(df)[, .SD[!any(diff(days) > 7)], (ani_id_year)]
# ani_id_year days
#1: ID468_2006 2006-04-01
#2: ID468_2006 2006-04-02
#3: ID468_2006 2006-04-03
#4: ID468_2006 2006-04-04
#5: ID468_2006 2006-04-05
数据
df问题不是很清楚:如果存在间隙,您是想删除所有具有相同ID的行,还是只想删除该行ID599_2006;2006-03-06
。此外,最好是使用dput
发布至少部分数据,以便示例“开箱即用”。您好,很抱歉我理解错误,如果存在大于x的间隙,我将删除整个id。明天我将尝试您的解决方案和所有其他解决方案,感谢您的帮助!我将签出dput并尝试下次运行它以使ist更容易。很抱歉,问题不太清楚:是否要删除具有相同id的所有行ID是否存在间隙,或者是否只想删除该行ID599_2006;2006-03-06
。此外,最好使用dput
发布至少部分数据,以便示例“开箱即用”。您好,我很抱歉理解错误,如果存在大于x的间隙,我将删除整个id。明天我将尝试您的解决方案和所有其他解决方案,感谢您的帮助!我将签出dput,并尝试下次运行它以使ist更容易。对不起。我认为应该删除的id是ID599
,而不是ID468
。是的,我的坏。“保留”和“删除”的顺序不正确。我已经编辑了答案。但是,下面发布了一些更好的解决方案。我认为应该删除的id是ID599
,而不是ID468
。是的,我的坏。“保留”和“删除”我已经编辑了答案。但是,下面已经发布了一些更好的解决方案。