2016-12-18 3 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 2つだけの値を使用することを見るが、それは3つのラベルがあります。

> labels(d$b) 

Values and labels: 

    14 'First' 
    33 'no-use' 
    72 'Second' 

未使用のラベル(33)をそこから削除するにはどうすればよいですか?ポイントはです。すべて未発行のラベルを削除してください。どちらが未使用か分かりません。私は33 expliciteを削除する方法を知っていた。しかし、それは目標ではありません。

私が知っているのは、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

これだけ作品を、未使用のlablesは、ラベルの末尾にあります-リスト。そのユースケースをカバーするために私の質問を修正しました。 – buhtz

+1

位置に関係なく未使用のラベルを削除するように@buhtzの回答が更新されました – manotheshark

関連する問題