ফ্যাক্টর স্তর এবং ফ্যাক্টর লেবেলের মধ্যে বিভ্রান্তি


106

আর এর কোনও ফ্যাক্টরের লেভেল এবং লেবেলের মধ্যে পার্থক্য রয়েছে বলে মনে হয় এখন অবধি, আমি সর্বদা ভেবেছিলাম স্তরগুলি ফ্যাক্টর স্তরের 'আসল' নাম, এবং লেবেলগুলি আউটপুট হিসাবে ব্যবহৃত নাম (যেমন টেবিল এবং প্লট) । স্পষ্টতই, এটি উদাহরণ নয় যেমন নীচের উদাহরণটি দেখায়:

df <- data.frame(v=c(1,2,3),f=c('a','b','c'))
str(df)
'data.frame':   3 obs. of  2 variables:
 $ v: num  1 2 3
 $ f: Factor w/ 3 levels "a","b","c": 1 2 3

df$f <- factor(df$f, levels=c('a','b','c'),
  labels=c('Treatment A: XYZ','Treatment B: YZX','Treatment C: ZYX'))
levels(df$f)
[1] "Treatment A: XYZ" "Treatment B: YZX" "Treatment C: ZYX"

আমি ভেবেছিলাম যে ('a', 'b', 'c') স্তরগুলি স্ক্রিপ্ট করার সময় কোনওভাবে এখনও অ্যাক্সেস করা যেতে পারে, তবে এটি কার্যকর হয় না:

> df$f=='a'
[1] FALSE FALSE FALSE

তবে এটি করে:

> df$f=='Treatment A: XYZ' 
[1]  TRUE FALSE FALSE

সুতরাং, আমার প্রশ্ন দুটি অংশ নিয়ে গঠিত:

  • স্তর এবং লেবেলের মধ্যে পার্থক্য কী?

  • স্ক্রিপ্টিং এবং আউটপুট জন্য ফ্যাক্টর স্তরগুলির জন্য আলাদা আলাদা নাম রাখা কি সম্ভব?

পটভূমি: দীর্ঘ স্ক্রিপ্টগুলির জন্য, সংক্ষিপ্ত ফ্যাক্টরের স্তরের সাথে স্ক্রিপ্ট করা অনেক সহজ বলে মনে হচ্ছে। তবে রিপোর্ট এবং প্লটগুলির জন্য, এই সংক্ষিপ্ত ফ্যাক্টরের স্তরগুলি পর্যাপ্ত নাও হতে পারে এবং যথাযথ নামগুলির সাথে প্রতিস্থাপন করা উচিত।

উত্তর:


131

খুব সংক্ষিপ্ত: স্তরগুলি ইনপুট, factor()ফাংশনে লেবেলগুলি আউটপুট । একটি ফ্যাক্টরের কেবল একটি levelবৈশিষ্ট্য থাকে যা ফাংশনে labelsআর্গুমেন্ট দ্বারা সেট করা হয় factor()। এটি এসপিএসএসের মতো পরিসংখ্যান প্যাকেজের লেবেলের ধারণার চেয়ে পৃথক এবং শুরুতে বিভ্রান্তিকর হতে পারে।

কোডের এই লাইনে আপনি কী করেন

df$f <- factor(df$f, levels=c('a','b','c'),
  labels=c('Treatment A: XYZ','Treatment B: YZX','Treatment C: ZYX'))

আর কে বলছে যে সেখানে ভেক্টর রয়েছে df$f

  • যা আপনি একটি ফ্যাক্টর রূপান্তর করতে চান,
  • বিভিন্ন স্তরে ক, খ এবং সি হিসাবে কোডেড থাকে
  • এবং যার জন্য আপনি স্তরগুলি চিকিত্সা এ ইত্যাদি হিসাবে লেবেল করাতে চান for

ফ্যাক্টর ফাংশনটি a, b এবং c এর মানগুলির সন্ধান করবে, তাদেরকে সংখ্যার ফ্যাক্টর শ্রেণিতে রূপান্তর করবে এবং লেকের মানগুলিকে levelগুণকের বৈশিষ্ট্যে যুক্ত করবে। এই বৈশিষ্ট্যটি অভ্যন্তরীণ সংখ্যাসূচক মানগুলি সঠিক লেবেলে রূপান্তর করতে ব্যবহৃত হয়। তবে আপনি যেমন দেখতে পান তেমন কোনও labelবৈশিষ্ট্য নেই।

> df <- data.frame(v=c(1,2,3),f=c('a','b','c'))    
> attributes(df$f)
$levels
[1] "a" "b" "c"

$class
[1] "factor"

> df$f <- factor(df$f, levels=c('a','b','c'),
+   labels=c('Treatment A: XYZ','Treatment B: YZX','Treatment C: ZYX'))    
> attributes(df$f)
$levels
[1] "Treatment A: XYZ" "Treatment B: YZX" "Treatment C: ZYX"

$class
[1] "factor"

1
দ্রুত উত্তর দেওয়ার জন্য ধন্যবাদ! আমার ধারণা আমি এখন স্তর এবং লেবেলের উদ্দেশ্য বুঝতে পেরেছি। টেবিলের নাম এবং প্লটের কিংবদন্তিগুলি ম্যানুয়ালি সম্পাদনা না করে আউটপুটটিকে মানবিকভাবে আরও ভাল পাঠযোগ্য করে তোলার জন্য কোনও পরামর্শ হতে পারে?
donodarazao

6
আমি প্রায়শই লেবেলগুলি ষড়যন্ত্র / তৈরির আগে স্তরগুলিকে ডান রূপান্তরিত করতাম, উদাহরণস্বরূপ, "" "," বি "," সি "হিসাবে সামঞ্জস্য করার সময় স্তরগুলি রাখি, তারপরে স্তরগুলি (এফ) <- পেস্ট (" চিকিত্সা ", টর্পার (স্তরগুলি ( f)), sep = "") [বা কিছু] প্লট করার সময়। অথবা একটি সমান্তরাল ফ্যাক্টর তৈরি করুন_ফেরাটিটি যা আপনি বহন করে থাকেন এবং কেবল আউটপুট জন্য ব্যবহার করেন ...
বেন বলকার

আমি উভয় সম্পর্কে ভেবেছিলাম, তবে উভয় পদ্ধতিরই অসুবিধা রয়েছে। বিপুল সংখ্যক গ্রাফের প্লট করার সময় প্রথমটি ক্লান্তিকর হয়ে উঠতে পারে এবং দ্বিতীয়টি যখন প্রচুর ডেটা সংগ্রহের জন্য স্ক্রিপ্টিংয়ের সাথে জড়িত থাকে তখন ক্লান্তিকর হতে পারে। তবে স্পষ্টতই এটিকে এড়ানোর কোনও উপায় নেই, তাই আমি আপনার পরামর্শ নিয়ে যাব। :)
donodarazao

@ 42- "সংখ্যাসম্য" দিয়ে আপনি কী বোঝেন তা আমি নিশ্চিত নই। আপনি যদি ফ্যাক্টরের অভ্যন্তরীণ মানগুলি বোঝাতে চান তবে আমি উপরে যা বলেছিলাম ঠিক সেটাই। সুতরাং অভ্যন্তরীণ সংখ্যাগত মান উল্লেখ । আপনি যদি levelsযুক্তিটি নির্দিষ্ট করে থাকেন তবে আপনি ইনপুটটিতে মানগুলি দিতে পারেন যা labelsতর্কের সাথে মিলে যেতে হবে । আর লেবেলগুলিকে রাখে (গুণ হিসাবে levelsএবং বিভ্রান্তি রয়েছে) এবং পূর্ণসংখ্যা কোডগুলি অভ্যন্তরীণভাবে সঞ্চয় করে। এই পূর্ণসংখ্যার কোডগুলির মূল মানগুলির সাথে কোনও সম্পর্ক নেই, সেগুলি যে ধরণেরই ছিল। আমার মনে হয় আপনি আমাকে ভুল বুঝেছেন।
জোরিস মেজ

দুঃক্ষিত। আপনি যা লিখছেন তা হ'ল আমার বোধগম্যতা, এবং এখন আমি আপনার প্রশ্নটি পুনরায় পড়ছি, আপনি কোথায় অন্যরকম বলেছিলেন বলে আমি ভাবতে পারি না। আমি আমার মন্তব্য মুছে ফেলব কারণ এটি কোনও কিছুর চেয়ে কম যোগ করে।
আইআরটিএফএম

17

আমি একটি প্যাকেজ "lfactors" লিখেছি যা আপনাকে স্তর বা লেবেলগুলির মধ্যে উল্লেখ করতে দেয়।

# packages
install.packages("lfactors")
require(lfactors)

flips <- lfactor(c(0,1,1,0,0,1), levels=0:1, labels=c("Tails", "Heads"))
# Tails can now be referred to as, "Tails" or 0
# These two lines return the same result
flips == "Tails"
#[1]  TRUE FALSE FALSE  TRUE  TRUE FALSE
flips == 0 
#[1]  TRUE FALSE FALSE  TRUE  TRUE FALSE

মনে রাখবেন যে একটি লাইফ্যাক্টরের প্রয়োজন হয় স্তরগুলি সংখ্যাসূচক হওয়া যাতে তারা লেবেলগুলির সাথে বিভ্রান্ত না হয়।


3
এটি একটি দুর্দান্ত প্যাকেজ এবং এটি পোস্ট করার জন্য এবং এটি লেখার জন্য ধন্যবাদ। দেখে মনে হচ্ছে এটি কার্যকারিতার ধরণের যা আর ফ্যাক্টরগুলির নেটিভ হওয়া উচিত - এমন একটি প্যাকেজ দেখে ভাল লাগে যা বিল্ট ইন ইনক্যুয়ালিটি চেক সহ এই ধরণের নাম-মান জোড় ম্যাপিং সরবরাহ করে।
সোরেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.