簡體   English   中英

R:如何解決無效的下標類型“列表”

[英]R : How to resolve invalid subscript type 'list'

原始數據框為

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,因為在它們的子集中,我有一個“ 0-V”組合,后跟“ 1-S”

我已將其拆分為數據幀列表,我想獲取這些數據幀上某些特定條件的ID,但出現錯誤

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,其中記錄有0個狀態和名稱“ V”的記錄,然后是1個狀態和名稱“ S”,如ID 2。

為此,我正在嘗試為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)])

如何下標數據框以獲得所需的檢查條件?

您的數據:

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)
}

使用“分組依據”類型的函數。 我喜歡data.table,其他人則喜歡dplyr:

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及其語法。 子集化可能是微不足道的下一步。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM