R:如何解决无效的下标类型 'list'
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
...
现在我需要找到一个条件,以便在记录状态为 0 和名称 'V' 后跟状态为 1 和名称 "S" 的记录中获取 ID,例如 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)
}
使用 "group by" 类型的函数。我喜欢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
如果您喜欢或继续使用 data.table 及其语法,则可以使用 setDF
。子集化可能是微不足道的下一步。
原始数据帧是
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
...
现在我需要找到一个条件,以便在记录状态为 0 和名称 'V' 后跟状态为 1 和名称 "S" 的记录中获取 ID,例如 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)
}
使用 "group by" 类型的函数。我喜欢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
如果您喜欢或继续使用 data.table 及其语法,则可以使用 setDF
。子集化可能是微不足道的下一步。