簡體   English   中英

如何在R的數據框中的列中查找和刪除一定數量的具有相同連續值的行?

[英]How to find and delete a certain number of rows with the same consecutive value in a column in a dataframe in R?

在我的數據框中,有一列以“聲音”和“響應”為值。 理想情況下,模式是兩個聲音后跟一個響應。 但是,可能會發生三個聲音后跟一個響應的情況。

每當R在我的數據中發現此模式時,如何告訴R升旗? 在刪除第三個聲行之前,我需要分別查看每種情況。

>df <- data.frame(V1=rep("SN", 7),  
             V3=c("Sound", "Sound", "Response", "Sound", "Sound", "Sound", "Response"), 
             V4=c("XYZc02i03", "XYZq02i03", 200, "ZYXc01i30", "ZYXq01i30", "ZYXc01i35", 100), 
             stringsAsFactors=FALSE) 

V1       V3        V4
SN    Sound XYZc02i03
SN    Sound XYZq02i03
SN Response       200
SN    Sound ZYXc01i30
SN    Sound ZYXq01i30
SN    Sound ZYXc01i35
SN Response       100     

因此,找到三個連續的聲音並刪除它們中的最后一個(即緊隨以下響應之前的聲音)后,我應該具有所需的模式,如下所示:

V1       V3        V4
SN    Sound XYZc02i03
SN    Sound XYZq02i03
SN Response       200
SN    Sound ZYXc01i30
SN    Sound ZYXq01i30
SN Response       100  

抱歉,我一直在發布這些基本問題。 與往常一樣,任何想法都將不勝感激!

cumsum(rle(df$V3)$lengths)[rle(df$V3)$lengths == 3]
[1] 6

這將返回“聲音”連續排在第三位的位置矢量。 現在,您可以輕松地刪除它們或在某些列中標記這些位置。

我認為這可行,盡管可能有更簡單的解決方案:

df <- data.frame(V1=rep("SN", 7),  
             V3=c("Sound", "Sound", "Response", "Sound", "Sound", "Sound", "Response"), 
             V4=c("XYZc02i03", "XYZq02i03", 200, "ZYXc01i30", "ZYXq01i30", "ZYXc01i35", 100), 
             stringsAsFactors=FALSE)

df

my.run <- rep(0,dim(df)[1])

if(df$V3[1]=='Sound') (my.run[1] = 1) else my.run[1] = 0

for (i in 2:dim(df)[1]) {

     if(df$V3[i]=='Sound') (my.run[i] = my.run[i-1] + 1) else my.run[i] = 0

}

df2 <- df[my.run < 3,]
df2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM