Data type conversion and recoding variables

as.numeric, as.character અને as.factor એ R ના પ્રકારો વચ્ચે રૂપાંતર કરે છે (ન ફેરવાય એના માટે NA સાથે), ifelse() શરત પ્રમાણે મૂલ્યો ફરી કોડ કરે છે, અને factors ને સંખ્યા બનતાં પહેલાં as.character નો આંટો લેવો પડે છે.

9 min read · 9 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


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 મળે છે. કેમ, અને ઉકેલ શું?

  1. Factors એમના આંતરિક સ્તરના codes માં ફેરવાય છે (મૂળાક્ષર પ્રમાણે: "100" < "85" < "92"); ઉકેલ: as.numeric(as.character(marks))
  2. R 99 થી ઉપરના marks સંઘરી શકતું નથી, એટલે એણે ફરી નંબર આપ્યા
  3. CSV માં પહેલાં મૂલ્યોમાંથી અવતરણચિહ્નો કાઢવાં જોઈતાં હતાં
  4. 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: કડક કારકુન દરેક નિષ્ફળ વિનિમયની જાહેરાત કરે છે.

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Data Filtering and cleaning

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

Data type conversion and recoding variables · Statistical Methods and Data Analysis (MDC-03) · Gri-Learn