R语言 深度和子集:删除行的方式错误

v1uwarro  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(119)

我试图删除我的数据集中符合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

如果ireg = 13,我想获得一个数据集,其中排除了tpens值大于2000的所有行(如果ireg不等于13,我需要保留tpensireg的所有其他值)。
我试过了

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列上满足特定条件的行,而不删除所有其他内容?
我希望我能解释清楚

eqqqjvef

eqqqjvef1#

subsetfilter * 保留 * 条件匹配的行。因此,您更希望反向选择:

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

7rtdyuoh2#

data %>% filter((ireg == 13 & tpens <= 2000) | ireg != 13)

相关问题