R:如何在if-else语句中进行计数并删除if-count<;2. 模型
这些将被保留R:如何在if-else语句中进行计数并删除if-count<;2. 模型,r,if-statement,delete-row,R,If Statement,Delete Row,这些将被保留 dt[!(duplicated(dt[, -2]) | duplicated(dt[, -2], fromLast = TRUE)), ] # Model Price region # 10 B 15 W # 13 C 24 E 对于20k观测,几乎有5000种模型类型 dt[duplicated(dt[, -2]) | duplicated(dt[, -2], fromLast = TRUE), ] # Model
dt[!(duplicated(dt[, -2]) | duplicated(dt[, -2], fromLast = TRUE)), ]
# Model Price region
# 10 B 15 W
# 13 C 24 E
对于20k观测,几乎有5000种模型类型
dt[duplicated(dt[, -2]) | duplicated(dt[, -2], fromLast = TRUE), ]
# Model Price region
# 1 A 12 W
# 2 A 14 E
# 3 A 15 E
# 4 A 13 W
# 5 A 16 W
# 6 B 36 E
# 7 B 32 E
# 8 B 24 E
# 9 B 14 E
# 11 C 14 W
# 12 C 11 W
# 14 C 31 W
这些将被保留
dt[!(duplicated(dt[, -2]) | duplicated(dt[, -2], fromLast = TRUE)), ]
# Model Price region
# 10 B 15 W
# 13 C 24 E
对于20k观测,几乎有5000种模型类型
dt[duplicated(dt[, -2]) | duplicated(dt[, -2], fromLast = TRUE), ]
# Model Price region
# 1 A 12 W
# 2 A 14 E
# 3 A 15 E
# 4 A 13 W
# 5 A 16 W
# 6 B 36 E
# 7 B 32 E
# 8 B 24 E
# 9 B 14 E
# 11 C 14 W
# 12 C 11 W
# 14 C 31 W
您可以创建一个计数器变量并根据它进行过滤。使用dplyr软件包:
库(dplyr)
dt%groupby(Model)%%>%filter(n_distinct(region)>1)%%>%groupby(Model,region)%%>%filter(n()>1)
您可以创建一个计数器变量并根据它进行筛选。使用dplyr软件包:
库(dplyr)
dt%group\U by(模型)%%>%filter(n\u distinct(区域)>1)%%>%group\U by(模型,区域)%%>%filter(n()>1)
您只是查看这两列,还是数据更复杂dt[duplicated(dt[,-2])| duplicated(dt[,-2],fromLast=TRUE),]
。非常感谢。但是,如果所有这些都在同一个区域,我们也可以去掉模型类型吗。让我们把第13排换成(C,24,W)。现在,我想删除整个类型C,因为所有的C都在W区域。你只是在看这两列,还是你的数据更复杂dt[duplicated(dt[,-2])| duplicated(dt[,-2],fromLast=TRUE),]
。非常感谢。但是,如果所有这些都在同一个区域,我们也可以去掉模型类型吗。让我们把第13排换成(C,24,W)。现在,我想删除整个类型C,因为所有的C都在W区域。这很有效。非常感谢。但是,如果所有这些都在同一个区域,我们也可以去掉模型类型吗。让我们把第13排换成(C,24,W)。现在,我想删除整个类型C,因为所有C都在W区域。没有理由在你的ave
中使用as.numeric
它,是吗?@YanyingLidt[带(dt,ave(as.numeric(Model),Model,FUN=length)!=ave(as.numeric(Model),dt[,-2],FUN=length)),]
这是独立于当前问题还是同时进行?@Frank如果区域是OP原始数据集中的一个因素,您将收到无效级别警告。但第二次你是对的example@rawr这是一个独立的问题。让我们回到我发布的原始数据。如果所有模型都落在一个区域中,我想去掉模型类型,怎么样?这很有效。非常感谢。但是,如果所有这些都在同一个区域,我们也可以去掉模型类型吗。让我们把第13排换成(C,24,W)。现在,我想删除整个类型C,因为所有C都在W区域。没有理由在你的ave
中使用as.numeric
它,是吗?@YanyingLidt[带(dt,ave(as.numeric(Model),Model,FUN=length)!=ave(as.numeric(Model),dt[,-2],FUN=length)),]
这是独立于当前问题还是同时进行?@Frank如果区域是OP原始数据集中的一个因素,您将收到无效级别警告。但第二次你是对的example@rawr这是一个独立的问题。让我们回到我发布的原始数据。如果所有的模型类型都在一个区域中,我想去掉它们,怎么样?
set.seed(1)
n <- 20000
dd <- data.frame(Model = sample(1:5000, n, TRUE),
Price = rpois(n, 15),
region = sample(c('E','W'), n, TRUE))
dim(dd[duplicated(dd[, -2]) | duplicated(dd[, -2], fromLast = TRUE), ])
# [1] 17289 3
dim(dd[ave(as.numeric(dd$region), dd[, -2], FUN = length) > 1, ])
# [1] 17289 3
dt[ave(as.numeric(dt$region), dt[, -2], FUN = length) > 1, ]
# Model Price region
# 1 A 12 W
# 2 A 14 E
# 3 A 15 E
# 4 A 13 W
# 5 A 16 W
# 6 B 36 E
# 7 B 32 E
# 8 B 24 E
# 9 B 14 E
# 11 C 14 W
# 12 C 11 W
# 14 C 31 W