当因子在R中采用特定值时如何从data.frame中删除行

问题描述

我正在研究R中的汽车数据集。在那儿,我有一列名为fuel,属于类别因子。因此,汽车总数分为5种。我想从该列中删除3种类型。一个例子如下:

fuel:  
 CNG     :  40                                                                                      
 Diesel  :2133   
 Electric:   1   
 LPG     :  23                          
 Petrol  :2120

如何使用一个命令删除因子水平CNGElectricLPG

我已经尝试过如下操作,但是可以,但是我认为有更好的方法,例如使用1行命令。

1。

car <- car[!car$fuel == "CNG",]
car <- car[!car$fuel == "Electric",]
car <- car[!car$fuel == "LPG",]

我也尝试了以下方法,但这没有用,为什么下面的命令不起作用?

2。

car <- car[!car$fuel == "CNG"||"Electric"||"LPG",]

解决方法

常见的解决方案是:

car[!(car$fuel %in% c("CNG","Electric","LPG")),]

要使第二个解决方案起作用,首先您需要使用|而不是||,因为您要处理向量。其次,您需要声明要执行的逻辑测试,以便R理解:

car[!(car$fuel == "CNG" | car$fuel == "Electric" | car$fuel == "LPG"),]

通过德摩根定律简化了:

car[car$fuel != "CNG" & car$fuel != "Electric" & car$fuel != "LPG",]
,

要添加到sindri_baldur解决方案中,您可以像这样使用keytool -v -list -keystore YOUR_KEYSTORE

subset

您的第二个版本失败,因为您使用# simulate data set.seed(2) n <- 12 car <- data.frame(fuel = factor( sample.int(5,size = n,replace = TRUE),labels = c("CNG","LPG","Gas","Unknown")),id = 1:n) # show alternative solution subset(car,fuel != "CNG" & fuel != "Electric" & fuel != "LPG") #R> fuel id #R> 1 Unknown 1 #R> 3 Unknown 3 #R> 5 Gas 5 #R> 6 Unknown 6 subset(car,!fuel %in% c("CNG","LPG")) #R> fuel id #R> 1 Unknown 1 #R> 3 Unknown 3 #R> 5 Gas 5 #R> 6 Unknown 6 而不是||。参见|,尤其是

help("Logic",package = "base")&表示逻辑AND,而&&|表示逻辑OR。较短的形式以与算术运算符几乎相同的方式执行元素比较。较长的形式从左到右求值,只检查每个向量的第一个元素。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...