【问题标题】:How to remove rows from a data.frame when a factor takes particular values in R [duplicate]当因子在R中采用特定值时如何从data.frame中删除行[重复]
【发布时间】:2020-08-19 12:22:19
【问题描述】:

我正在研究 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", ]

【问题讨论】:

  • 数据集从何而来?
  • 我使用了来自 Kaggle 的这个数据集,来自 cardekho 的车辆数据集。用它来学习 R 中的线性回归。

标签: r factors


【解决方案1】:

一个常见的解决方案是:

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", ]

【讨论】:

  • 感谢您的回答,您能否解释一下为什么我写的第二条命令不起作用?
【解决方案2】:

要添加到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"),尤其是,

&amp;&amp;&amp; 表示逻辑与,||| 表示逻辑或。较短的形式执行元素比较的方式与算术运算符大致相同。较长的形式从左到右计算,仅检查每个向量的第一个元素。

【讨论】:

    猜你喜欢
    • 2018-10-23
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    相关资源
    最近更新 更多