我有一个很大的数据集。我想删除所有不正确的行。此外,我想删除不正确行之前和之后的一些行。
我发现了一些有用的东西。但不幸的是,它对我来说不起作用。我想我与"行名"有关,但我无法修复它。因此,我感谢任何有用的建议。
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
的行的索引,并删除索引indx
、indx + after
和indx - 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,] }