2016-12-18 75 views
1

我想從data.set下降所有未售出的標籤如何從R中的memisc: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

這是不是很緊湊,但它看起來像時要刪除'你可以使用下面的

labels(d$b) <- labels(d$b)[seq_len(length(unique(d$b)))] 

更新要刪除「72」

您的問題聲明33' 。無論如何,下面的函數將刪除未使用的標籤

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]])] 
    } 
} 
+0

這僅適用於在未使用的標貼是在標籤的結尾-list。我修改了我的問題以涵蓋該用例。 – buhtz

+1

@buhtz答案已更新,可放置未使用的標籤,無論位置如何 – manotheshark