我想从data.set
中删除所有未标注的标签。
让我们假设这个例子data.set
(来自memisc
包的类)。
library(memisc)
d <- data.set(a = sample(1:10), b=rep(c(14,72),5))
labels(d$b) <- c('First' = 14, 'no-use' = 33, 'Second' = 72)
结果data.set
:
Data set with 10 observations and 2 variables
a b
1 4 First
2 1 Second
3 9 First
4 8 Second
5 7 First
6 10 Second
7 5 First
8 3 Second
9 2 First
10 6 Second
您会看到b
仅使用了两个值,但它有三个标签。
> labels(d$b)
Values and labels:
14 'First'
33 'no-use'
72 'Second'
如何从那里删除未使用的标签(33
)?关键是所有未标注的标签应该下垂,我不知道哪一个未使用。我知道如何删除33
明确的。但这不是目标。
我从基本-R data.frame
函数droplevels()
知道。像droplabels()
这样的东西会很高兴。
答案 0 :(得分:1)
这不是很紧凑,但您可以使用以下
labels(d$b) <- labels(d$b)[seq_len(length(unique(d$b)))]
<强>更新强>
您的问题表明,当您想要删除“33”时,您想要删除“72”。无论如何,以下函数将删除任何未使用的标签
labels(d$b) <- labels(d$b)[labels(d$b)@values %in% unique(d$b)]
以下内容将删除列表中所有元素的所有未使用标签
for (i in seq_along(d)) {
if(!is.null(labels(d[[i]]))) {
labels(d[[i]]) <- labels(d[[i]])[labels(d[[i]])@values %in% unique(d[[i]])]
}
}