dplyr & subset:删除行的错误方法

问题描述 投票:0回答:2

我正在尝试根据 2 列中的特定值删除数据集中的行,但似乎我以错误的方式设置它。

这里是数据集的样本

   nquest  nord   sex anasc  ireg   eta staciv studio    ID tpens
    <int> <int> <dbl> <int> <int> <int>  <int>  <int> <int> <int>
 1    173     1     1  1948    18    72      3      5     1  1800
 2   2886     1     1  1949    13    71      1      5     2  1211
 3   2886     2     0  1952    13    68      1      6     3  2100
 4   5416     1     0  1958     8    62      3      3     4   700
 5   7886     1     1  1950     9    70      1      5     5  2000
 6  20297     1     1  1960     5    60      1      3     6  1200
 7  20711     2     1  1944     4    76      1      2     7  2000
 8  22169     1     0  1944    15    76      4      2     8   600
 9  22276     1     1  1949     8    71      2      5     9  1200
10  22286     1     1  1950     8    70      1      2    10   850
11  22286     2     0  1956     8    64      1      2    11   650
12  22657     1     0  1951    13    69      1      7    12  2400
13  22657     2     1  1946    16    74      1      5    13  1500
14  23490     1     0  1937     5    83      2      5    14  1400
15  24147     1     1  1948     4    72      1      7    15  1730
16  24147     2     0  1958     4    62      1      5    16  1600
17  24853     1     1  1957    13    63      1      3    17  2180
18  27238     1     1  1952    12    68      1      3    19  1050
19  27730     1     1  1939    20    81      1      2    20  1470
20  27734     1     1  1947    20    73      1      2    21  1159

我想得到一个数据集,其中排除了

tpens
的值大于2000的所有行,如果
ireg
= 13(我需要维护
tpens
ireg
的所有其他值,如果
 ireg
不同于 13).

我试过了

new <- subset(data, data$ireg == 13 & data$tpens <= 2000)

但这是错误的,因为即使

tpens
现在低于 2000,它给我的数据集只有
ireg
== 13。我需要维护
ireg
的所有其他值(然后是
tpens 
与它们相关的值)实际上。

我也试过了

new <-data [!(data$ireg == 13 & data$tpens <= 2000),]

但都是一样的。即使使用 dplyr 的

filter
,我似乎也无法以正确的方式设置条件

如何同时删除 2 列上满足特定条件的行,但不删除所有其他内容?

我希望我能够解释自己

r dplyr dataset row subset
2个回答
2
投票

subset
filter
keeps 条件匹配的行。所以,你宁愿选择反向:

filter(data, !(ireg == 13 & tpens > 2000))

2
投票
data %>% filter((ireg == 13 & tpens <= 2000) | ireg != 13)
© www.soinside.com 2019 - 2024. All rights reserved.