2017-12-08 4 views
0

Origianlデータフレームは、このうちR:私は、その後、「0-V」の組み合わせを持っている彼らのサブセットのように、無効な添字タイプ「リスト」を解決する方法

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 

ですが、私はIDが2と3を取得することを期待します「1-S」

により、以下のような構造がある

invalid subscript type 'list' 

私はそのデータフレームのリストに分割していると私はそれらのデータフレームの上にいくつかの特定の条件のためにidを取得したいが、私はエラーを取得します

"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)]) 

です私は自分のデータフレームを下書きしてdesirを得ることができますチェック条件?

+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 

あなたは、あなたが好むならsetDFを使用するか、data.tableとその構文で働き続けることができます。部分集合は、次の些細なステップになる可能性があります。

関連する問題