2014-01-30 6 views
0

이 df 행에서 m = f 인 행을 제거하고 싶습니다. 여기서 t는 s와 b의 특정 조합이 무엇이든지 행의 4 개 내에 있습니다.여러 열의 값을 기반으로 df에서 행 제거

s<- c(1,1,1,1,1,1,2,1) 
b<- c(1,1,1,1,1,1,1,2) 
m <- c("o","o","o","o","f","o","o","o") 
data <- rnorm(8) 
t <- c(1,2,3,4,5,7,8,9) 
df<- as.data.frame(cbind(s,b,m,data,t)) 

그래서이 예에서 I는 'F'를 포함하는 행 등이 행 (그래서 t 5-9)보다 4까지 값 t를 포함하는 행을 제거하려면, 그들의 값이 제공 s와 b는 'f'가 있던 행과 같습니다. 따라서 행 5와 행 6은 제거되어야하지만 행 7은 제거되지 않습니다. 왜냐하면 s는 'f'가 발견 된 곳과 다르므로 행 8가 아니라 b가 다르기 때문입니다.

죄송합니다. 매우 짙은 질문입니다. 시도를 공식화하지 못했습니다.

답변

1

일반적으로 변수에 함수 이름을 사용하지 않는 것이 좋습니다. 따라서 표본 데이터를 myDF으로 다시 세웁니다. 또한 모든 열을 요인으로 고려하여 cbind() (str(df)으로 확인하십시오.) 마지막으로 무작위 데이터가 일관성을 유지하는지 확인하는 것이 좋습니다. 따라서 :

n <- which(myDF$m == "f") 
m <- which(myDF$t >= myDF$t[n] & myDF$t <= myDF$t[n] + 4) 
p <- which(myDF$s == myDF$s[n])[m] 
o <- which(myDF$b == myDF$b[n])[p] 
o <- o[ !is.na(o) ] 
myDF <- myDF[ -o, ] 
: 나는 더 나은 방법이 확신하지만,이해야 적어도 작업 - 여기
set.seed(55) 
myDF <- data.frame(s = c(1, 1, 1, 1, 1, 1, 2, 1), 
        b = c(1, 1, 1, 1, 1, 1, 1, 2), 
        m = c("o", "o", "o", "o", "f", "o", "o", "o"), 
        data = rnorm(8), 
        t = c(1, 2, 3, 4, 5, 7, 8, 9)) 

내가 문제를 해결하는 것이 방법이다

관련 문제