我正在研究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", ]发布于 2020-08-19 12:26:35
一个共同的解决方案是这样的:
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", ]发布于 2020-08-19 13:55:53
要添加到sindri_baldur解决方案中,可以像这样使用subset
# simulate data
set.seed(2)
n <- 12
car <- data.frame(fuel = factor(
sample.int(5, size = n, replace = TRUE),
labels = c("CNG", "Electric", "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", "Electric", "LPG"))
#R> fuel id
#R> 1 Unknown 1
#R> 3 Unknown 3
#R> 5 Gas 5
#R> 6 Unknown 6第二个版本失败了,因为您使用的是||而不是|。请参阅help("Logic", package = "base"),特别是,
&和&&表示逻辑,|和||表示逻辑OR。较短的表单以与算术运算符相同的方式执行元素级比较。较长的表单从左到右计算,只检查每个向量的第一个元素。
。
https://stackoverflow.com/questions/63486833
复制相似问题