问题描述
我正在研究R中的汽车数据集。在那儿,我有一列名为fuel
,属于类别因子。因此,汽车总数分为5种。我想从该列中删除3种类型。一个例子如下:
fuel:
CNG : 40
Diesel :2133
Electric: 1
LPG : 23
Petrol :2120
如何使用一个命令删除因子水平CNG
,Electric
和LPG
?
我已经尝试过如下操作,但是可以,但是我认为有更好的方法,例如使用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。较短的形式以与算术运算符几乎相同的方式执行元素比较。较长的形式从左到右求值,只检查每个向量的第一个元素。