r - اجبر أعمدة متعددة على العوامل دفعة واحدة




dataframe r-factor (4)

إذا كان لديك هدف آخر للحصول على قيم من الجدول ثم استخدامها لتحويلها ، يمكنك تجربة الطريقة التالية

### pre processing
ind <- bigm.train[,lapply(.SD,is.character)]
ind <- names(ind[,.SD[T]])
### Convert multiple columns to factor
bigm.train[,(ind):=lapply(.SD,factor),.SDcols=ind]

هذا يحدد الأعمدة التي هي على وجه التحديد حرف ، ثم يحولها إلى عامل.

لدي إطار بيانات نموذج مثل أدناه:

data <- data.frame(matrix(sample(1:40), 4, 10, dimnames = list(1:4, LETTERS[1:10])))

أريد أن أعرف كيف يمكنني تحديد أعمدة متعددة وتحويلها معًا إلى عوامل. أنا عادة ما تفعل ذلك في طريقة مثل data$A = as.factor(data$A) . ولكن عندما يكون إطار البيانات كبيرًا جدًا ويحتوي على الكثير من الأعمدة ، فإن هذه الطريقة ستستهلك الكثير من الوقت. لا أحد يعرف ما إذا كان هناك أي طريقة ذكية للقيام بذلك؟


اختر بعض الأعمدة للإكراه على العوامل:

cols <- c("A", "C", "D", "H")

استخدم lapply() لإجبار الأعمدة المختارة واستبدالها:

data[cols] <- lapply(data[cols], factor)

تحقق من النتيجة:

sapply(data, class)
#        A         B         C         D         E         F         G 
# "factor" "integer"  "factor"  "factor" "integer" "integer" "integer" 
#        H         I         J 
# "factor" "integer" "integer" 

هنا هو خيار استخدام dplyr . يقوم عامل التشغيل %<>% من magrittr بتحديث كائن lhs بالقيمة الناتجة.

library(magrittr)
library(dplyr)
cols <- c("A", "C", "D", "H")

data %<>%
       mutate_each_(funs(factor(.)),cols)
str(data)
#'data.frame':  4 obs. of  10 variables:
# $ A: Factor w/ 4 levels "23","24","26",..: 1 2 3 4
# $ B: int  15 13 39 16
# $ C: Factor w/ 4 levels "3","5","18","37": 2 1 3 4
# $ D: Factor w/ 4 levels "2","6","28","38": 3 1 4 2
# $ E: int  14 4 22 20
# $ F: int  7 19 36 27
# $ G: int  35 40 21 10
# $ H: Factor w/ 4 levels "11","29","32",..: 1 4 3 2
# $ I: int  17 1 9 25
# $ J: int  12 30 8 33

أو إذا كنا نستخدم data.table ، إما استخدام حلقة for مع set

setDT(data)
for(j in cols){
  set(data, i=NULL, j=j, value=factor(data[[j]]))
}

أو يمكننا تحديد "cols" في .SDcols وتعيين ( := ) rhs إلى "cols"

setDT(data)[, (cols):= lapply(.SD, factor), .SDcols=cols]







r-factor