[英]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.