[英]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.