2016-11-06 4 views
1

havenパッケージのread_sav関数を使用してSPSSファイルをインポートします。したがって、列名と関連ラベル(クラスlabelled)があります。havenパッケージからread_savを使用してデータフレームを注文したときのR - 損失ラベル

データフレームを注文したときにラベルが失われました。注文前に因子の変換で問題を避けることはできますが、それはバグか正常な動作ですか?

ここは簡単な例です。あなたはクラスlabelledための操作をサブセット化をサポートするパッケージをロードする必要が

DataForExample <- structure(list(CollectorNm = structure(c("Email Invitation 8", "Email Invitation 8", "Email Invitation 8", "Email Invitation 8", "Email Invitation 8", "Email Invitation 8"), label = "CollectorNm"), q0001 = structure(c(1, 1, 1, 1, 1, 1), label = "Avez-vous déjà suivi la formation Atlas-Vente des 18 et 19 octobre ?", class = "labelled", labels = structure(c(1, 2), .Names = c("Oui, j'ai bien suivi cette formation.", "Non, je n'y ai pas participé." ))), q0002_0001 = structure(c(3, 3, 3, 2, 3, 3), label = "La formation dans son ensemble", class = "labelled", labels = structure(c(1, 2, 3, 4), .Names = c("pas du tout satisfait", "plutôt pas satisfait", "plutôt satisfait", "très satisfait")))), .Names = c("CollectorNm", "q0001", "q0002_0001"), class = c("tbl_df", "tbl", "data.frame" ), row.names = c(NA, -6L))

View(DataForExample) # OK Toto <- DataForExample[order(DataForExample$q0001_0001),] View(Toto) # NOK : the labels disappeared

おかげ

答えて

1

havenの後にロードする方が良いです。このようなサポートを持つパッケージが少なくとも2つあります:Hmiscexpssです。免責事項:私はexpssパッケージの著者です。

UPDATE。ラベル付きのクラスを修正しました。

havenは、ラベル付きのすべての変数に対してlabelledクラスを設定していないようです。だから私たちはそれを修正する必要があります:

library(expss) 

for(each in colnames(DataForExample)){ 
    if(!("labelled" %in% class(DataForExample[[each]])) && 
     (!is.null(var_lab(DataForExample[[each]])) || 
     !is.null(val_lab(DataForExample[[each]])) 
     )) { 
     class(DataForExample[[each]]) = union("labelled", class(DataForExample[[each]])) 
    } 
} 

View(DataForExample) # OK 
Toto <- DataForExample[order(DataForExample$q0001),] 
View(Toto) # OK 
+0

ありがとう。私が作った例では問題ありませんが、より複雑なデータフレームの問題は残っています。私は正確に2つのパッケージで試してみます。問題は、(将来)因子変数と(将来の)文字列変数があるときに発生すると思われるので、私の質問で例を変更しました。 – Kumpelka

+0

@Kumpelka更新を参照してください。 –

関連する問題