Theory
ખાનું આખરે સુધારવા તૈયાર છે
આયાતના પાઠનું ઘાયલ ખાનું યાદ કરો: એક "absent" ની નોંધે screen-time ની દરેક સંખ્યાને લખાણમાં ફેરવી નાખી હતી. તમે એનું નિદાન str() થી કર્યું; આજે તમે એને સમારો છો:
survey$screen <- as.numeric(survey$screen)
Warning: NAs introduced by coercion
આંકડા સંખ્યા બન્યા; "absent" NA બન્યું (બરાબર ત્યાં જ જ્યાં ગયા પાઠનાં કૌશલ્યો સંભાળી લે છે). એક લીટી, એક પ્રામાણિક ચેતવણી. રૂપાંતર એટલું જ સાદું છે: સિવાય કે એક પ્રખ્યાત ફાંદો જે શ્રેણીઓને ખોટી સંખ્યાઓમાં ફેરવે છે.
Theory
કડક કારકુન સાથે ચલણનું વિનિમય
as.___() નું કુટુંબ એ ચલણનું વિનિમય છે: as.numeric સંખ્યાના ચલણમાં ફેરવે છે, as.character લખાણના ચલણમાં, as.factor શ્રેણીના ચલણમાં.
કારકુન કડક છે: "120" સાફ રીતે 120 માં બદલાય છે, પણ "absent" નું કોઈ સંખ્યાનું સમકક્ષ નથી: કારકુન NA પાછું આપે છે અને મોટેથી કહે છે (coercion ની ચેતવણી). જાહેરાત ક્યારેય અવગણશો નહીં: એ જ તમારી ગણતરી છે કે કેટલાં મૂલ્યો વિનિમયમાં નિષ્ફળ ગયાં.
Practical
રૂપાંતર કરો, સમારો, ફરી કોડ કરો
# CONVERSION: the as.___() family
raw <- c("120", "90", "absent", "240")
screen <- as.numeric(raw) # Warning: NAs introduced by coercion
screen # [1] 120 90 NA 240 repaired!
class(screen) # "numeric": always verify after converting
# make a deliberate categorical (Unit 1's classification, executable):
stay <- as.factor(c("hostel", "day", "hostel"))
levels(stay) # "day" "hostel"
# RECODING: ifelse(condition, value_if_yes, value_if_no): vectorised
usage <- ifelse(screen > 180, "heavy", "normal")
usage # "normal" "normal" NA "heavy"
# three bands: nest the no-branch
band <- ifelse(screen > 180, "heavy",
ifelse(screen > 90, "medium", "light"))
# binning shortcut worth knowing: cut()
# cut(screen, breaks = c(0, 90, 180, 1440),
# labels = c("light", "medium", "heavy"))
Theory
એ ફાંદો: factors સીધાં રૂપાંતરિત થતાં નથી
Factor લેબલોને આંતરિક સ્તરના codes તરીકે સંઘરે છે (1, 2, 3... મૂળાક્ષરના ક્રમમાં). એને સીધું numeric માં ફેરવો અને તમને codes મળે છે, મૂલ્યો નહીં:
f <- factor(c("120", "90"))
as.numeric(f)
[1] 2 1
120 અને 90 નહીં: 2 અને 1 ("120" મૂળાક્ષરના ક્રમમાં "90" પહેલાં આવે છે!). સાચો રસ્તો છે બે પગલાંનો આંટો:
as.numeric(as.character(f))
[1] 120 90
પહેલાં લેબલ, પછી સંખ્યા. આ R નો સૌથી પ્રખ્યાત શરૂઆતનો bug છે અને પરીક્ષાનો ખાતરીબદ્ધ પ્રશ્ન.
Quiz
marks <- factor(c("85", "100", "92")). એક student as.numeric(marks) ચલાવે છે અને 2 1 3 મળે છે. કેમ, અને ઉકેલ શું?
- Factors એમના આંતરિક સ્તરના codes માં ફેરવાય છે (મૂળાક્ષર પ્રમાણે: "100" < "85" < "92"); ઉકેલ: as.numeric(as.character(marks))
- R 99 થી ઉપરના marks સંઘરી શકતું નથી, એટલે એણે ફરી નંબર આપ્યા
- CSV માં પહેલાં મૂલ્યોમાંથી અવતરણચિહ્નો કાઢવાં જોઈતાં હતાં
- as.numeric ફક્ત integers પર ચાલે છે
Show the answer
Factors એમના આંતરિક સ્તરના codes માં ફેરવાય છે (મૂળાક્ષર પ્રમાણે: "100" < "85" < "92"); ઉકેલ: as.numeric(as.character(marks))
મૂળાક્ષર પ્રમાણે "100" પહેલું આવે છે (અક્ષરની સરખામણી, આંકડે આંકડે), એટલે સ્તરો 100=1, 85=2, 92=3 છે, અને as.numeric એ codes આપે છે. બે પગલાંનું as.numeric(as.character(...)) ખરેખરાં મૂલ્યો પાછાં લાવે છે: પહેલાં લેબલ બહાર, પછી સંખ્યા. વિકલ્પ B અને D એવી મર્યાદાઓ ઉપજાવે છે જે R માં નથી; C અટકાવવામાં મદદ કરે પણ પદ્ધતિ સમજાવતું નથી, જે પરીક્ષા પૂછે છે.
Think first
Survey ને જાતે ફરી કોડ કરો
screen માં 120, 90, NA, 240 છે. usage <- ifelse(screen > 180, "heavy", "normal") દરેક ઘટક માટે શું બનાવે છે એ કાઢો (ત્રીજા સાથે સાવધ), પછી tap કરો.
Show the answer
"normal" "normal" NA "heavy"
ઘટકે ઘટક: 120 અને 90 શરત નિષ્ફળ કરે છે → "normal"; 240 પાસ થાય છે → "heavy"; અને NA > 180 એ... NA છે (ગયા પાઠનું સરખામણીનું અંધત્વ), એટલે ifelse એ NA ને પસાર થવા દે છે: અજ્ઞાત અંદર, અજ્ઞાત બહાર.
ifelse એ vectorised છે (આખું ખાનું, કોઈ loop નહીં) અને NA વિશે પ્રામાણિક: પરીક્ષાઓ બંને ગુણધર્મ ચકાસે છે. ત્રણ કે વધુ પટ્ટા માટે, ifelse ને nest કરો કે cut() વાપરો.
Watch out
રૂપાંતરની checklist
1. Coercion ની ચેતવણી ધ્યાનમાં લો: એ તમારાં નવાં NA ગણે છે: sum(is.na(...)) થી આગળ તપાસો.
2. Factor થી સંખ્યા = બે પગલાં: as.numeric(as.character(f)): ક્યારેય સીધું નહીં.
3. પહેલાં અને પછી class(): જે રૂપાંતરે ચૂપચાપ કશું ન કર્યું (કે ખોટું કર્યું) એ એક નજરમાં પકડાય છે.
4. સુસંગત રીતે ફરી કોડ કરો: "heavy"/"Heavy"/"HEAVY" એ જ લખાણની ગંદકી ફરી ઊભી કરે જે તમે બે પાઠ પહેલાં સાફ કરી હતી.
Theory
એકમ 4 પૂરો: data આખરે ભરોસાપાત્ર છે
તમે હવે છેડેથી છેડા સુધી જે pipeline ચલાવો છો એ ગણો: આયાત, તપાસ, ઉપસમૂહ, ઉમેરવું/નામ બદલવું, પુનરાવર્તન કાઢવું, પ્રમાણભૂત કરવું, હદ તપાસવી, NA સંભાળવું, રૂપાંતર, ફરી કોડ કરવું. એ જ વ્યાવસાયિક data ની તૈયારી છે: ખરેખરા કામનું 60-80%. એકમ 5 એ ઇનામ છે: ક્રમમાં ગોઠવવું, જોડવું, સારાંશની commands, આવૃત્તિનાં કોષ્ટકો, અને R માં દોરાયેલો bell curve: એવા data પર આંકડાશાસ્ત્ર જેનો તમે આખરે બચાવ કરી શકો.
Summary
Key takeaways
- as.numeric/as.character/as.factor પ્રકારો બદલે છે; ન ફેરવાય એવાં મૂલ્યો ચેતવણી સાથે NA બને છે: એમને ગણો.
- Coercion ની ચેતવણી એ લખાણથી ખરડાયેલાં numeric ખાનાંના સમારકામની પહોંચ છે.
- FACTOR નો ફાંદો: as.numeric(factor) સ્તરના codes આપે છે; ઉકેલ છે as.numeric(as.character(f)).
- ifelse(શરત, હા, ના) vectorised રીતે ફરી કોડ કરે છે; NA એ NA તરીકે પસાર થાય છે; પટ્ટા માટે nest કરો કે cut() વાપરો.
- as.factor થી શ્રેણીગત ખાનાં જાણીજોઈને ચઢાવો: levels() અને table() જીવંત થાય છે.
- દરેક રૂપાંતર પહેલાં અને પછી class().
- Memory hook: કડક કારકુન દરેક નિષ્ફળ વિનિમયની જાહેરાત કરે છે.