অক্ষর থেকে ফ্যাক্টারে ডেটা ফ্রেম কলাম ফর্ম্যাট রূপান্তর করুন


153

আমি আমার data.frame বস্তু (কিছু কলামের ফরম্যাট (বর্গ) পরিবর্তন করতে চান mydfথেকে) charactor করার ফ্যাক্টর

আমি যখন read.table()ফাংশন দ্বারা টেক্সট ফাইলটি পড়ছি তখন আমি এটি করতে চাই না ।

কোন সাহায্য প্রশংসা করা হবে।


12
mydf favor আমার পছন্দের কলাম <<as asffor (mydf $ আমার পছন্দের কলাম)
টিম রিফ

ধন্যবাদ! তবে আমার আর একটি সমস্যা আছে। কলাম_নামের অক্ষরের অ্যারেতে আমার প্রতিটি কলামের নাম আছে []। আমি কীভাবে উপরের কমান্ডটি ব্যবহার করতে পারি (mydf $ col_names [i]) কাজ করে না।
রসুল

সমস্ত অক্ষর ভেরিয়েবলের জন্য স্বয়ংক্রিয়ভাবে এটি করার যে কোনও উপায়ে ডেটা.ফ্রেম স্ট্রিংএফ্যাক্টরগুলির সাথে এটি করে?
এটিয়েন লো-ডিকারি

@ এটিয়েনল-ডেকারি: ঠিক unclassএবং ফলাফলটিতে ব্যবহার data.frameকরুন ,.
আইআরটিএফএম

উত্তর:


197

হাই বিশ্বের আরে স্বাগতম।

mtcars  #look at this built in data set
str(mtcars) #allows you to see the classes of the variables (all numeric)

#one approach it to index with the $ sign and the as.factor function
mtcars$am <- as.factor(mtcars$am)
#another approach
mtcars[, 'cyl'] <- as.factor(mtcars[, 'cyl'])
str(mtcars)  # now look at the classes

এটি চরিত্র, তারিখ, পূর্ণসংখ্যা এবং অন্যান্য শ্রেণীর জন্যও কাজ করে

যেহেতু আপনি আর-তে নতুন হন আমি আপনাকে এই দুটি ওয়েবসাইটের দিকে নজর দেওয়ার পরামর্শ দিই:

আর রেফারেন্স ম্যানুয়াল: http://cran.r-project.org/manouts.html

আর রেফারেন্স কার্ড: http://cran.r-project.org/doc/contrib/Short-refcard.pdf


ধন্যবাদ! তবে আমার আর একটি সমস্যা আছে। কলাম_নামের অক্ষরের অ্যারেতে আমার প্রতিটি কলামের নাম আছে []। আমি উপরের কমান্ড ব্যবহার কিভাবে করতে পারেন (তন্ন তন্ন mydf$col_names[i]না mydf[,col_names[i]]কাজ করে না।)
Rasoul

1
@ রাসুল, mydf[, col_names]এটি করবেন
ডারডম

3
রেফার্সের জন্য +1। এটি বেসিক স্টাফ, যা জিজ্ঞাসা করা ঠিক আছে তবে এই (এবং অনুরূপ) কাজগুলিতে যে বিস্তৃত কাজ করা হয়েছে তা সম্পর্কে সচেতন হওয়াও ঠিক fine
রোমান Luštrik

84
# To do it for all names
df[] <- lapply( df, factor) # the "[]" keeps the dataframe structure
 col_names <- names(df)
# do do it for some names in a vector named 'col_names'
df[col_names] <- lapply(df[col_names] , factor)

ব্যাখ্যা। সমস্ত ডেটাফ্রেমগুলি তালিকা এবং [একাধিক মূল্যবান আর্গুমেন্টের সাথে ব্যবহৃত ফলাফলগুলি একইভাবে তালিকাগুলি হয়, সুতরাং তালিকার উপরে লুপ করা কাজ lapply। উপরের অ্যাসাইনমেন্ট তালিকাগুলির একটি সেট তৈরি করবে যা ফাংশনটি data.frame.[<-সাফল্যের সাথে ডেটাফ্রেমে ফিরে যেতে পারে,df

অন্য কৌশলটি কেবল সেই কলামগুলিতে রূপান্তর করা হবে যেখানে অনন্য আইটেমের সংখ্যা কিছু মানদণ্ডের চেয়ে কম হয়, উদাহরণস্বরূপ সারিগুলির সংখ্যার লগের চেয়ে কম বলি:

cols.to.factor <- sapply( df, function(col) length(unique(col)) < log10(length(col)) )
df[ cols.to.factor] <- lapply(df[ cols.to.factor] , factor)

এটি খুব সুন্দর সমাধান! এটি কলাম নম্বরগুলির সাথেও কাজ করতে পারে যা বিশেষত কার্যকর হতে পারে যদি আপনি অনেকগুলি পরিবর্তন করতে চান তবে সবগুলিই না। উদাহরণস্বরূপ, col_nums <- সি (1, 6, 7: 9, 21:23, 27:28, 30:31, 39, 49:55, 57) তারপরে df [, কল_নুমস] <- ল্যাপলি (ডিএফ [, কোল_নুমস]] , ফ্যাক্টর)।
ডাব্লু গ্রে

ক্যাভেট: প্রথম সমাধানটি যদি কাজ করে না length(col_names)==1। সেক্ষেত্রে, df[,col_names]স্বয়ংক্রিয়ভাবে একটি ভেক্টর পরিবর্তে দৈর্ঘ্য 1 একটি তালিকায় পদচ্যুত করা হয়, এবং তারপর lapplyএকটি সম্পূর্ণ হিসাবে কলাম প্রতিটি প্রবেশ বদলে উপরে চালনা করার চেষ্টা করে। এটি ব্যবহার করে প্রতিরোধ করা যেতে পারে df[,col_names,drop=FALSE]
পি শ্নেল

এএ ভাল পয়েন্ট। অন্যান্য প্রার্থনা যা তালিকার স্থিতি ধরে রাখতে পারে তা হ'ল ব্যবহার df[col_names]
আইআরটিএফএম

27

আপনি dplyr::mutate_if()সমস্ত অক্ষর কলাম রূপান্তর করতে বা dplyr::mutate_at()মনোনীত অক্ষর কলামগুলি ফ্যাক্টারে রূপান্তর করতে ব্যবহার করতে পারেন :

library(dplyr)

# all character columns to factor:
df <- mutate_if(df, is.character, as.factor)

# select character columns 'char1', 'char2', etc. to factor:
df <- mutate_at(df, vars(char1, char2), as.factor)

18

আপনি যদি ইতিমধ্যে আপনার ডেটা লোড করার পরে আপনার ডেটাতে ফ্রেমে সমস্ত চরিত্রের পরিবর্তনশীলগুলি পরিবর্তন করতে চান তবে আপনি এটি এমনভাবে করতে পারেন, নামক একটি ডেটাতে dat:

character_vars <- lapply(dat, class) == "character"
dat[, character_vars] <- lapply(dat[, character_vars], as.factor)

এটি কোনও ভেক্টর তৈরি করে শনাক্ত করে যে কোন কলামগুলি শ্রেণীর character, তারপরে as.factorসেই কলামগুলির জন্য প্রযোজ্য ।

নমুনা তথ্য:

dat <- data.frame(var1 = c("a", "b"),
                  var2 = c("hi", "low"),
                  var3 = c(0, 0.1),
                  stringsAsFactors = FALSE
                  )

ফ্যাক্টর প্রতি চরিত্র ভেরিয়েবলের সম্পূর্ণ রূপান্তর সাধারণত হয় যখন ডেটা পড়ার, যেমন, সঙ্গে stringsAsFactors = TRUE, কিন্তু বলুন, আপনি ডাটা দিয়ে পড়েছি এই দরকারী read_excel()থেকে readxlপ্যাকেজ এবং একটি র্যান্ডম বন মডেল গ্রহণ করে না যে প্রশিক্ষণের জন্য চান অক্ষর ভেরিয়েবল।
স্যাম ফির্কে 7'16

13

আর একটি সংক্ষিপ্ত উপায় আপনি ব্যবহার করতে পারেন হলেন ম্যাগরিট্র প্যাকেজ %<>%থেকে পাইপ ( ) । এটি অক্ষর কলাম মাইকোলেমকে একটি ফ্যাক্টারে রূপান্তর করে ।

library(magrittr)

mydf$mycolumn %<>% factor

আরও তথ্যের সাথে সম্পাদনা করুন। কেবল-কোড এবং "এটি চেষ্টা করুন" উত্তরগুলি নিরুৎসাহিত করা হয়েছে, কারণ সেগুলিতে কোনও অনুসন্ধানযোগ্য সামগ্রী নেই এবং কারও "কেন এটি চেষ্টা করা উচিত" তা ব্যাখ্যা করবেন না। আমরা এখানে জ্ঞানের উত্স হতে চেষ্টা করি।
ব্রায়ান টম্পসেট - :13

যদি আমি আমার ডিএফ এর সমস্ত কলামের জন্য এটি ব্যবহার করতে চাই না তবে প্লিজ?
মোস্তফা

5

আমি এটি একটি ফাংশন দিয়ে করছি। এই ক্ষেত্রে আমি কেবল চরিত্রের পরিবর্তনশীলগুলিকে ফ্যাক্টারে রূপান্তর করব:

for (i in 1:ncol(data)){
    if(is.character(data[,i])){
        data[,i]=factor(data[,i])
    }
}

আমি বিশ্বাস করি আসলে কলামটি বের করতে এবং এটি একটি [[i]]
ফ্যাক্টারে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.