【发布时间】:2011-12-16 10:37:36
【问题描述】:
我有以下数据框:
> 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's)在我的代码的各个部分。因此,当我需要在代码的推进部分中删除行时,我不想返回并尝试在a-like 表达式中编写逻辑表达式的逆。这就是为什么df[-a,] 对我更有用。
【问题讨论】:
-
-1 您的问题中包含一个解决方案。没有问题需要解决(因为问题目前的措辞)。
-
@RichieCotton:我的解决方案使用修改后的(不同的)逻辑表达式,最终得到我需要的结果;但我想看到的是如何从数据框中删除特定行。我在我的问题中包含了我的解决方案,因为我不想在答案中看到它。
-
我在我的问题中添加了几行来解释我想知道的内容。
-
我认为当
df[df$plan!=0 | df$sevk!=0,]似乎是正确的方法时,你为什么想要df[-a,]这样的东西令人困惑。你能评论一下为什么在更大的范围内,像df[-a,]这样的东西更可取吗?也许,从更大的角度来看,有一种方法可以避免这个问题。 -
这是因为我正在编写很长的代码,并且在我的代码的各个部分中都有各种变量赋值(例如我的示例中的
a)。因此,当我需要在代码的推进部分中删除行时,我不想返回并尝试在a-like 表达式中编写逻辑表达式的逆。这就是为什么df[-a,]对我更有用。