如何删除一行,因为该行在另一列中只有一个或同一条目?

时间:2019-05-15 18:04:22

标签: r dataframe row

我准备了一个小例子:exp.pic

enter image description here

我想删除欧宝的行,因为欧宝在同一型号中出现两次,而福特只出现一次。

我只想拥有至少两个不同型号的汽车。

Car<-c("Audi","Audi","BMW","BMW","Mercedes","Opel","Ford","Audi","BMW","Mercedes","Audi","BMW","Mercedes","Opel")
Model<-c("A4","A4","X5","X5","E","Astra","Fiesta","A6","M3","C","A6","530","A","Astra")

Car<-cbind(Car,Model)
Car<-data.frame(Car)

输出应如下所示:

enter image description here

例如,只要有其他奥迪车型,奥迪A4就会出现五次。

我希望我能解释清楚。

2 个答案:

答案 0 :(得分:2)

另一次尝试dplyr

Car %>%
  group_by(Car) %>%
  filter(n_distinct(Model) > 1) %>%
  ungroup() %>%
  arrange(Car, Model)

# # A tibble: 11 x 2
#  Car      Model
#  <fct>    <fct>
#  1 Audi     A4   
#  2 Audi     A4   
#  3 Audi     A6   
#  4 Audi     A6   
#  5 BMW      530  
#  6 BMW      M3   
#  7 BMW      X5   
#  8 BMW      X5   
#  9 Mercedes A    
# 10 Mercedes C    
# 11 Mercedes E 

答案 1 :(得分:0)

使用subset,我们可以针对具有多个独特模型的汽车公司进行过滤。

out <- subset(Cars, ave(Model, Car, FUN = function(x) length(unique(x))) > 1)
out
#        Car Model
#1      Audi    A4
#2      Audi    A4
#3       BMW    X5
#4       BMW    X5
#5  Mercedes     E
#8      Audi    A6
#9       BMW    M3
#10 Mercedes     C
#11     Audi    A6
#12      BMW   530
#13 Mercedes     A

数据

Cars <- data.frame(Car, Model, stringsAsFactors = FALSE)
#  ^ note the different name