如何根据子集函数从数据框中删除行?

时间:2015-08-14 13:26:27

标签: r

我想从数据框中删除一些行。我认为使用subset这将是最简单的方法。

我使用下面的代码删除了之前的一些行:

data_selected <- subset(tbl_data, Name.x != "XXX" & Name.y != "YYY")

问题是如何从我的表中删除两个单元格(同一行)中具有相同字符串的行。

我认为可以使用mtcars作为示例:

                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
可以使用

gearcarb列。如您所见,应从此数据中删除两个第一行,因为这两行在这两列中具有相同的值4。请转到帐户,在我的数据中,我没有数字值,但字符串。

1 个答案:

答案 0 :(得分:3)

根据帖子中的信息,我认为'gear'和'carb'列之间的比较(!=)足以subset数据集

df1 <- mtcars[1:5,]
subset(df1, gear!=carb)
#                     mpg cyl disp  hp drat    wt  qsec vs am gear carb
#Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
#Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
#Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2

这也适用于“非数字”列,但不适用于部分匹配。

如果我们需要例外保留同时包含“未知”的行,我们可以在添加另一个逻辑条件后使用|运算符(`(gear =='Unknown'&amp; carb == '未知'))到原始状态。

在数据集中进行一些更改以显示输出(仅作为示例,我知道我正在通过执行此操作将数字列更改为字符)

 df1$gear[4] <- 'Unknown'
 df1$carb[4] <- 'Unknown'
 df1$gear[5] <- 'Unknown'


subset(df1, (gear=='Unknown' & carb=='Unknown') | gear!=carb)
#                   mpg cyl disp  hp drat    wt  qsec vs am    gear    carb
#Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1       4       1
#Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0 Unknown Unknown
#Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0 Unknown       2