我有一个数据框如下:
id = c("a2887", "a2887", "a5511","a5511","a2806", "a1491", "a1491", "a4309", "a4309")
plan = c("6V", "6V", "25HS", "50HS", "25HS", "250Mbps", "250Mbps", "15Mbps", "15Mbps")
df = data.frame(id, plan)
Run Code Online (Sandbox Code Playgroud)
看起来像:
id plan
a2887 6V
a2887 6V
a5511 25HS
a5511 50HS
a2806 25HS
a1491 250Mbps
a1491 250Mbps
a4309 15Mbps
a4309 15Mbps
Run Code Online (Sandbox Code Playgroud)
我想删除具有相同 ID 但在列计划中具有不同值的行,只保留具有唯一 ID/计划匹配的行并创建一个新的数据框,如下所示:
id plan
a2887 6V
a2806 25HS
a1491 250Mbps
a4309 15Mbps
Run Code Online (Sandbox Code Playgroud)
有没有什么优雅的方法来实现这一目标?谢谢!
我们可以使用tidyverse. 按“id”分组后,“id”filter组只有一个唯一的“计划”值并获取distinct行
library(dplyr)
df %>%
group_by(id) %>%
filter(n_distinct(plan)==1) %>%
distinct()
# A tibble: 4 x 2
# Groups: id [4]
# id plan
# <fctr> <fctr>
#1 a2887 6V
#2 a2806 25HS
#3 a1491 250Mbps
#4 a4309 15Mbps
Run Code Online (Sandbox Code Playgroud)