繁体   English   中英

如何删除R中存在重复并满足另一个条件的行?

[英]How to delete rows which have duplicates and meet another condition in R?

我不知道这是否是一个过于具体的问题,但我希望删除在一列中有重复的行,并满足一个条件。

具体来说,我想删除“host_id”(数字)列中的重复观察之一,其中“reviews_per_month”(数字)列中的值最低。

换句话说,正如我的报告中所描述的:“由于一个主机可以有多个房源,因此出现多次的主机ID将被过滤。每月评论最多的该主机ID的列表用于分析”。

我已经尝试了很多事情,使用 duplicated()、filter()、ifelse()、casewhen() 等,但它似乎不起作用。 有谁知道如何开始? 提前致谢!

我们可以使用slice_max 按'host_id'分组,将reviews_per_monthmax的行slice

library(dplyr)
df %>%
   group_by(host_id) %>%
   slice_max(reviews_per_month)

或者如果是单独删除min观察

df %>%
   group_by(host_id) %>%
   filter(reviews_per_month != min(reviews_per_month, na.rm = TRUE))

尝试这个:

df <- data.frame(x = c("a", "a", "b", "b"), y = c(1, 2, 2, 1)) # Test data

library(dplyr)

df %>% 
  distinct(x, .keep_all = T)
# Wrong!

df %>% 
  arrange(-y) %>% 
  distinct(x, .keep_all = T)
# This is how you want to have it

更详细一点:您只希望在host_id变量中有一个条目(上面示例中的x ),因此您需要使用distinct() 但是distinct()只保留输入 distinct 的变量的第一次观察(在您的情况下: host_id ),因此您必须首先以递减方式对数据进行排序。 我在示例中使用了arrange(-y) ,您应该将y替换为reviews_per_month

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM