【发布时间】:2021-03-16 19:13:04
【问题描述】:
考虑以下名为mat 的数据。我的目标是计算每个id 的v1 的唯一值并将它们存储在变量n 中。然后,如果n <= 1 和n >= 2,我想从列表中删除数据框。
id v1 v2
1 2 3
1 2 5
2 9 8
2 4 5
3 7 8
3 1 5
这是我尝试过的:
dat <- list()
dat2 <- list()
for (i in seq_along(unique(mat$id))){
dat[[i]] <- data.frame(subset(mat,mat$id==unique(mat$id)[i]))
dat[[i]]$n <- length(unique(dat[[i]]$v1))
if(dat[[i]]$n >= 2){
dat2[[i]] <- dat[[i]]
}
}
非常感谢任何帮助!
【问题讨论】:
-
抱歉,我不明白您要对列表和数据框做什么。这是一个简单的方法来查找每个
id的唯一v1值。tapply(mat[,"v1"],mat[,"id"],unique) -
或唯一值的计数。
tapply(mat[,"v1"],mat[,"id"],function(x) length(unique(x)))。您可能想重新表述您的问题并使用dput来分享您的数据(我假设mat是一个矩阵,但我们现在无法确定)。 -
非常感谢。实际上,我的计划是对列表中的每个数据框进行一些分析。这就是我将
mat子集化的原因。mat是一个巧合。我的意思是数据框,而不是矩阵。但是第一个数据框(id = 1)应该从unique(v1) = 1开始删除。