إزالة الملصقات المتغيرة المرفقة مع وظائف استيراد SPSS أجنبية/HMISC
سؤال
كالعادة ، حصلت على بعض ملفات SPSS التي استوردها إلى R spss.get
تعمل من Hmisc
صفقة. أنا منزعج من labelled
فئة ذلك Hmisc::spss.get
يضيف إلى جميع المتغيرات في data.frame
, ، وبالتالي تريد إزالته.
labelled
الفصل يعطيني الصداع عندما أحاول الجري ggplot
أو حتى عندما أرغب في القيام ببعض التحليلات الوهمية! حل واحد هو الإزالة labelled
فئة من كل متغير في data.frame
. كيف أقوم بذلك؟ هل هذا ممكن على الإطلاق؟ إذا لم يكن كذلك ، فما هي خياراتي الأخرى؟
أريد حقًا تجاوز متغيرات إعادة تقديم "من الصفر" as.data.frame(lapply(x, as.numeric))
و as.character
عند الاقتضاء ... وأنا بالتأكيد لا أريد تشغيل SPSS وإزالة الملصقات يدويًا (لا تحب SPSS ، ولا أهتم بتثبيته)!
شكرًا!
المحلول
يمكنك تجنب إنشاء متغيرات "المسمى" في spss.get مع الوسيطة: ، use.value.labels = false.
w <- spss.get('/tmp/my.sav', use.value.labels=FALSE, datevars=c('birthdate','deathdate'))
يمكن أن تفشل الكود من Bhattacharya إذا تم تسمية فئة المتجه المسمى ببساطة "بدلاً من C (" المسمى "،" Factor ") في هذه الحالة كان ينبغي أن يكون:
class(x[[i]]) <- NULL # no error from assignment of empty vector
يمكن استنساخ الخطأ الذي أبلغته بهذا الرمز:
> b <- 4:6
> label(b) <- 'B Label'
> str(b)
Class 'labelled' atomic [1:3] 4 5 6
..- attr(*, "label")= chr "B Label"
> class(b) <- class(b)[-1]
Error in class(b) <- class(b)[-1] :
invalid replacement object to be a class string
نصائح أخرى
إليكم كيف أتخلص من الملصقات تمامًا. على غرار حل Jyotirmoy ولكنه يعمل مع ناقل وكذلك بيانات. (ائتمانات جزئية لفرانك هاريل)
clear.labels <- function(x) {
if(is.list(x)) {
for(i in 1 : length(x)) class(x[[i]]) <- setdiff(class(x[[i]]), 'labelled')
for(i in 1 : length(x)) attr(x[[i]],"label") <- NULL
}
else {
class(x) <- setdiff(class(x), "labelled")
attr(x, "label") <- NULL
}
return(x)
}
استخدم على النحو التالي:
my.unlabelled.df <- clear.labels(my.labelled.df)
يمكنك تجربة read.spss
وظيفة من foreign
صفقة.
طريقة تقريبية وجاهزة للتخلص من labelled
الفصل الذي أنشأته spss.get
for (i in 1:ncol(x)) {
z<-class(x[[i]])
if (z[[1]]=='labelled'){
class(x[[i]])<-z[-1]
attr(x[[i]],'label')<-NULL
}
}
ولكن هل يمكنك تقديم مثال حيث labelled
يسبب مشاكل؟
إذا كان لدي متغير MAED
في إطار البيانات x
انشأ من قبل spss.get
, ، أملك:
> class(x$MAED)
[1] "labelled" "factor"
> is.factor(x$MAED)
[1] TRUE
لا ينبغي أن يواجه رمز مكتوب جيدًا والذي يتوقع عامل (على سبيل المثال) أي مشاكل.
حسنًا ، لقد اكتشفت ذلك unclass
يمكن استخدام الوظيفة لإزالة الفئات (من سيخبر ، Aye؟!):
library(Hmisc)
# let's presuppose that variable x is gathered through spss.get() function
# and that x is factor
> class(x)
[1] "labelled" "factor"
> foo <- unclass(x)
> class(foo)
[1] "integer"
إنه ليس الحل الأكثر حظًا ، فقط تخيل حفنة من المتجهات ذات التحويل الخلفي ... إذا كان أي شخص يتصدر هذا ، فسوف أتحقق منه كإجابة ...
يفترض:
library(Hmisc)
w <- spss.get('...')
يمكنك إزالة ملصقات متغير يسمى "var1" باستخدام:
attributes(w$var1)$label <- NULL
إذا كنت تريد أيضًا إزالة الفصل "Labled" ، فيمكنك القيام بذلك:
class(w$var1) <- NULL
أو إذا كان المتغير يحتوي على أكثر من فئة واحدة:
class(w$var1) <- class(w$var1)[-which(class(w$var1)=="labelled")]
أتمنى أن يساعدك هذا!