r语言 - 过滤/删除不正确的行(加上上方和下方)



我有一个很大的数据集。我想删除所有不正确的行。此外,我想删除不正确行之前和之后的一些行。

我发现了一些有用的东西。但不幸的是,它对我来说不起作用。我想我与"行名"有关,但我无法修复它。因此,我感谢任何有用的建议。

library(dplyr)
var1 <- 1:20
var2 <- c(1,1,1,1,0,1,0,1,1,1,0,0,1,1,1,1,1,0,1,1)
var3 <- rep(3, 20)
dat <- data.frame (var1, var2, var3)
View(dat)

extract.with.context <- function(x, rows, after = 0, before = 0) {
  match.idx  <- which(rownames(x) %in% rows)
  span       <- seq(from = -before, to = after)
  extend.idx <- c(outer(match.idx, span, `+`))
  extend.idx <- Filter(function(i) i > 0 & i <= nrow(x), extend.idx)
  extend.idx <- sort(unique(extend.idx))
  return(x[extend.idx, , drop = FALSE])
}
extract.with.context(dat, dat$var2==0, after = 1, before = 1)
View(dat)
#expected output
var1 <- c(1,2,3,9,14,15,16,20)
var2 <- c(1,1,1,1,1,1,1,1)
var3 <- rep(3,length(var2))
dat <- data.frame(var1, var2, var3)
View(dat)

我们得到column等于value的行的索引,并删除索引indxindx + afterindx - before的行。

extract.with.context <- function(df, column, value, before, after) {
    indx <- which(df[[column]] == value)
    df[-c(indx, indx + after, indx - before), ]
}
extract.with.context(dat, "var2", 0, 1, 1)
#   var1 var2 var3
#1     1    1    3
#2     2    1    3
#3     3    1    3
#9     9    1    3
#14   14    1    3
#15   15    1    3
#16   16    1    3
#20   20    1    3

得到了一些专业的帮助:)

toDelete<- c(which(dat$var2==0) , which(dat$var2==0)+1, which(dat$var2==0)-1)
dat <- dat[-toDelete,]

甚至更好(控制未删除任何内容的情况(

toDelete<- c(which(dat$var2==0) , which(dat$var2==0)+1, which(dat$var2==0)-1)
if (!identical(toDelete,numeric(0))) { dat <- dat[-toDelete,] }

最新更新