特定行我有一個數據幀例如爲:卸下從數據幀
sub day
1 1
1 2
1 3
1 4
2 1
2 2
2 3
2 4
3 1
3 2
3 3
3 4
和我想刪除可以由子和一天的組合來標識特定行。 例如,我想刪除sub ='1'和day ='2',sub = 3和day ='4'的行。我怎麼能這樣做? 我意識到我可以指定行號,但是這需要應用於一個巨大的數據框,這將是繁瑣的通過和ID每行。
特定行我有一個數據幀例如爲:卸下從數據幀
sub day
1 1
1 2
1 3
1 4
2 1
2 2
2 3
2 4
3 1
3 2
3 3
3 4
和我想刪除可以由子和一天的組合來標識特定行。 例如,我想刪除sub ='1'和day ='2',sub = 3和day ='4'的行。我怎麼能這樣做? 我意識到我可以指定行號,但是這需要應用於一個巨大的數據框,這將是繁瑣的通過和ID每行。
DF[ ! ((DF$sub ==1 & DF$day==2) | (DF$sub ==3 & DF$day==4)) , ] # note the ! (negation)
或者,如果子是您使用報價建議的因素:
DF[ ! paste(sub,day,sep="_") %in% c("1_2", "3_4"), ]
也可以使用子集:(使用「[」儘管有些人聲稱不需要它的時候,我贊同在德克的回答使用which
)
subset(DF, ! paste(sub,day,sep="_") %in% c("1_2", "3_4"))
這可以歸結爲兩個不同的步驟:
which()
data.frame
。下面是一個例子:
R> set.seed(42)
R> DF <- data.frame(sub=rep(1:4, each=4), day=sample(1:4, 16, replace=TRUE))
R> DF
sub day
1 1 4
2 1 4
3 1 2
4 1 4
5 2 3
6 2 3
7 2 3
8 2 1
9 3 3
10 3 3
11 3 2
12 3 3
13 4 4
14 4 2
15 4 2
16 4 4
R> ind <- which(with(DF, sub==2 & day==3))
R> ind
[1] 5 6 7
R> DF <- DF[ -ind, ]
R> table(DF)
day
sub 1 2 3 4
1 0 1 0 3
2 1 0 0 0
3 0 1 3 0
4 0 2 0 2
R>
而且我們看到,sub==2
只有一個與day==1
剩餘條目。
編輯的複合條件可以用「或」如來完成如下:
ind <- which(with(DF, (sub==1 & day==2) | (sub=3 & day=4)))
,這裏是一個新的完整的例子
R> set.seed(1)
R> DF <- data.frame(sub=rep(1:4, each=5), day=sample(1:4, 20, replace=TRUE))
R> table(DF)
day
sub 1 2 3 4
1 1 2 1 1
2 1 0 2 2
3 2 1 1 1
4 0 2 1 2
R> ind <- which(with(DF, (sub==1 & day==2) | (sub==3 & day==4)))
R> ind
[1] 1 2 15
R> DF <- DF[-ind, ]
R> table(DF)
day
sub 1 2 3 4
1 1 0 1 1
2 1 0 2 2
3 2 1 1 0
4 0 2 1 2
R>
好吧,我認爲這將有一些額外的工作有所幫助......我需要身份證entify多天,所以我試着對你的代碼稍加修改:ind <-which(with(Licor,day = c('1','16','30','37','51','52','57 ','58'))),但會收到錯誤消息。有任何想法嗎? –
處理表達式來計算indies,你可能會發現'help(match)'有用。 –
這個答案通過例子解釋了所需的策略,如何應用代碼以及應用哪些代碼。這很有幫助。 – Irwin
下面是一個解決您的問題使用dplyr的filter
函數。
雖然您可以將數據幀作爲第一個參數傳遞給任何dplyr函數,但我已使用它的%>%
運算符,它將數據框管道化爲一個或多個dplyr函數(僅在此情況下爲過濾)。
一旦你對dplyr比較熟悉,cheat sheet非常方便。
> print(df <- data.frame(sub=rep(1:3, each=4), day=1:4))
sub day
1 1 1
2 1 2
3 1 3
4 1 4
5 2 1
6 2 2
7 2 3
8 2 4
9 3 1
10 3 2
11 3 3
12 3 4
> print(df <- df %>% filter(!((sub==1 & day==2) | (sub==3 & day==4))))
sub day
1 1 1
2 1 3
3 1 4
4 2 1
5 2 2
6 2 3
7 2 4
8 3 1
9 3 2
10 3 3
一個簡單的解決方案
cond1 <- df$sub == 1 & df$day == 2
cond2 <- df$sub == 3 & df$day == 4
df <- df[!cond1,]
df <- df[!cond2,]
那就是票。謝謝。 %的百分比是什麼意思? –
這是一箇中綴運算符的示例,它返回一個邏輯向量,告訴您第一個參數中的哪些元素包含在第二個參數中。請參閱?符合其定義的位置。 –
@BonddedDust以及 – 2015-03-24 19:38:45