2017-12-08 19 views
0

Origianl dataframe는R은 : 유효하지 않은 첨자 유형 '목록'을 해결하는 방법

이 중
id status name ... 
1 0  V 
1 0  S 
1 1  V 
1 0  V 
2 0  V 
2 1  V 
2 1  S 
3 0  V 
3 1  S 
4 1  S 
4 0  V 
4 1  V 

, 나는 자신의 서브 세트로 I가 "0-V"조합이 따랐다 ID 2, 3를 가져올 것으로 기대입니다 내가 dataframes 목록에 있음을 분할하고 난 그 dataframes에 대한 몇 가지 특정 조건의 id의를 가져 싶지만 오류를 얻을

"1-S"에 의해 구조는 다음과 같다

invalid subscript type 'list' 

"1" 
id status name ... 
1 0  V 
1 0  S 
1 1  V 
1 0  V 

"2" 
id status name ... 
2 0  V 
2 1  V 
2 1  S 
... 

는 지금은 조건을 찾을 필요 같은 나는 ID 2.

같은 1 개 상태와 이름 "S"다음에 0의 상태와 이름을 'V'의 기록이 ID를 얻을 그것은 여기

로 그렇게 들어

, 나는 sapply에 대한 함수를 작성하기 위해 노력하고있어하지만 난 믿고있어로 데이터를 첨자 할 수 아니에요하면 코드를입니다

q4 <- result1[,c("id", "name", "date", "status")] 

lstQ <- split(q4, result1$id) 


f3 <- function(g) { 
    g[g$status == 0 & g$name == "V",] 
} 

e <- as.data.frame(names(lstQ)[sapply(lstQ, f3)]) 

방법 내가 원하는 데이터 프레임에 subscript 할 수 있습니까? 점검 조건?

+0

원래 data.frame을 왜 분할했는지 이해할 수 없습니다. 그 단계없이 이것을하는 것이 훨씬 쉬울 것입니다. data.frame 샘플을 제공하십시오. https://stackoverflow.com/a/5963610/1412059 – Roland

+0

@Roland Edited. 사용자 ID 목록을 가져와야하기 때문에이 작업을 수행했습니다. – hbabbar

답변

0

귀하의 데이터 :

DF <- read.table(text = "id status name 
       1 0  V 
       1 0  S 
       1 1  V 
       1 0  V 
       2 0  V 
       2 1  V 
       2 1  S 
       3 0  V 
       3 1  S 
       4 1  S 
       4 0  V 
       4 1  V", header = TRUE) 

이의 함수를 만들어 보자는 :

fun <- function(DF) { 
    one <- DF$status == 0 & DF$name == "V" 
    two <- DF$status == 1 & DF$name == "S" 

    #Is two TRUE after one is TRUE? 
    if (any(one) && any(two)) return(any(which(two) > which.max(one))) 
    return(FALSE) 
} 

유형 기능 "에 의해 그룹의"를 사용합니다. 나는 다른 사람들이 dplyr을 선호 data.table 좋아 :

library(data.table) 
setDT(DF) 
DF[, fun(.SD), by = id] 
# id V1 
#1: 1 FALSE 
#2: 2 TRUE 
#3: 3 TRUE 
#4: 4 FALSE 

당신이 선호하는 또는 data.table 및 구문 작업을 계속하는 경우 당신은 다음 setDF을 사용할 수 있습니다. 하위 집합은 사소한 다음 단계 일 수 있습니다.