[英]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_month
为max
的行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.