如何从memisc中删除未使用的标签:R中的data.set?

时间:2016-12-18 13:20:34

标签: r

我想从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()这样的东西会很高兴。

1 个答案:

答案 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]])]
   }
}