我有以下数据框:
> str(df)
'data.frame': 3149 obs. of 9 variables:
$ mkod : int 5029 5035 5036 5042 5048 5050 5065 5071 5072 5075 ...
$ mad : Factor w/ 65 levels "Akgün Kasetçilik ",..: 58 29 59 40 56 11 33 34 19 20 ...
$ yad : Factor w/ 44 levels "BAKUGAN","BARBIE",..: 1 1 1 1 1 1 1 1 1 1 ...
$ donem: int 201101 201101 201101 201101 201101 201101 201101 201101 201101 201101 ...
$ sayi : int 201101 201101 201101 201101 201101 201101 201101 201101 201101 201101 ...
$ plan : int 2 2 3 2 2 2 7 3 2 7 ...
$ sevk : int 2 2 3 2 2 2 6 3 2 7 ...
$ iade : int 0 0 3 1 2 2 6 2 2 3 ...
$ satis: int 2 2 0 1 0 0 0 1 0 4 ...
我想从这个数据框中删除21个特定的行。
> a <- df[df$plan==0 & df$sevk==0,]
> nrow(a)
[1] 21
当我删除那21行时,我将会得到一个新的数据框,其行数为3149 - 21 = 3128。我找到以下解决方案:
> b <- df[df$plan!=0 | df$sevk!=0,]
> nrow(b)
[1] 3128
我的解决方案使用了一种修改后的逻辑表达式(!=
代替==
,|
代替&
)。除了修改原始的逻辑表达式之外,我如何获得没有这21行的新数据框?我需要类似这样的东西:
> df[-a,] #does not work
编辑(特别是针对那些点踩的人,我希望他们能明白为什么我需要另一种解决方案):我之所以要求另一种解决方案,是因为我正在编写一段很长的代码,并且在代码的不同部分有各种变量赋值(例如我的示例中的a
)。因此,当我需要删除代码前进部分中的行时,我不想回去尝试编写 a
-like 表达式内部逻辑表达式的反面。这就是为什么对我来说 df[-a,]
更加可用的原因。
df[-a,]
这样的东西,当df[df$plan!=0 | df$sevk!=0,]
似乎是正确的方法。你能否解释一下,在更大的背景下,为什么像df[-a,]
这样的方法更可取?也许在更大的背景下,有一种方法可以避免这个问题。 - jthetzela
)。因此,当我需要在代码的前进部分删除行时,我不想回去尝试编写a
-like 表达式内逻辑表达式的反义词。这就是为什么df[-a,]
对我来说更可用的原因。 - Mehper C. Palavuzlar