[英]Removing rows from R data frame
我有以下數據框:
> 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
編輯 (特別是對downvoters,我希望他們明白,為什么我需要一個替代的解決方案):我問了不同的解決方案,因為我正在寫一個長碼,和(好像有各種變量賦值a
在我的例子“收費)我的代碼的各個部分。 因此,當我需要刪除代碼前進部分中的行時,我不想回過頭來嘗試在a
表達式中編寫邏輯表達式的反轉。 這就是為什么df[-a,]
對我來說更有用。
只是否定你的邏輯下標:
a <- df[!(df$plan==0 & df$sevk==0),]
您可以使用rownames
指定“互補”數據框。 如果它們是數字rownames它更容易:
df[-as.numeric(rownames(a)),]
但更一般地說,您可以使用:
df[setdiff(rownames(df),rownames(a)),]
你在尋找subset()
嗎?
dat <- airquality
dat.sub <- subset(dat, Temp > 80 & Month < 10)
dim(dat)
dim(dat.sub)
適用於您的示例:
df.sub <- subset(df, plan != 0 & sevk != 0)
你快到了。 'a'需要是指數的矢量:
df <- data.frame(plan=runif(10),sevk=runif(10))
a <- c(df$plan<.1 | df$sevk < .1) # some logical thing
df[-a,]
或者,與您的數據:
a <- c(df$plan==0 & df$sevk==0)
df[-a,]
我不明白你為什么反對你的解決方案,但這是另一種方式。
which( df[df$plan==0 & df$sevk==0,], arr.ind=TRUE) ->killlist
newdf <- df[-c(killlist[1,])]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.