[英]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.