簡體   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