【问题标题】:Removing rows with non-unique values based on a second variable in R?基于R中的第二个变量删除具有非唯一值的行?
【发布时间】:2019-11-17 04:27:19
【问题描述】:

我有一个带有时间戳和位置名称的数据集(无线电跟踪数据)。我想删除在同一时间戳上有两个不同位置的所有实例(同时被两个不同的接收器检测到)。

示例数据集:

ts<-c("2014-08-07 20:12", "2014-08-07 20:12",  "2014-08-07 20:13","2014-08-07 20:13","2014-08-07 20:14", "2014-08-07 20:14")
site<-c(a,a,a,b,c,c)
df<-data.frame(cbind(ts,site))
df
                ts site
1 2014-08-07 20:12    a
2 2014-08-07 20:12    a
3 2014-08-07 20:13    a
4 2014-08-07 20:13    b
5 2014-08-07 20:14    c
6 2014-08-07 20:14    c

所以我想删除第 3&4 行,但保留第 1、2、5 和 6 行。

我查看了 duplicateddistinctunique 的不同应用,但不知道如何将其基于另一列(在这种情况下时间戳)。

感谢所有帮助

【问题讨论】:

    标签: r


    【解决方案1】:

    这是我使用dplyr的方法

    df %>% 
      # consider each time stamp seperately
      group_by(ts) %>% 
      # keep only observations which have one unique `site` value
      filter(length(unique(site)) == 1)
    

    【讨论】:

      【解决方案2】:

      使用dplyr,您可以确定每个时间戳的n_distinct 站点的数量,然后过滤不等于2 的站点(如果等于1,您也可以只过滤)。

      library(dplyr)
      
      df %>%
        group_by(ts) %>%
        mutate(num_loc = n_distinct(site)) %>%
        filter(num_loc!=2)
      

      与@wusel 的回答类似,您可以过滤为:

      filter(n_distinct(site) == 1)
      

      然后省略mutate

      【讨论】:

        猜你喜欢
        • 2020-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-22
        相关资源
        最近更新 更多