ProHoster > Օրագիր > Վարչակազմը > R փաթեթը tidyr և դրա նոր գործառույթները pivot_longer և pivot_wider
R փաթեթը tidyr և դրա նոր գործառույթները pivot_longer և pivot_wider
Փաթեթ կոկիկ ներառված է R լեզվով ամենատարածված գրադարաններից մեկի առանցքում. կոկիկ.
Փաթեթի հիմնական նպատակը տվյալների ճշգրիտ ձևի բերելն է:
Արդեն հասանելի է Habré-ում հրապարակումը նվիրված այս փաթեթին, սակայն այն թվագրվում է 2015թ. Եվ ես ուզում եմ ձեզ պատմել ամենաարդիական փոփոխությունների մասին, որոնց մասին օրեր առաջ հայտարարեց դրա հեղինակը՝ Հեդլի Ուիքհեմը։
SJKԱրդյո՞ք collect()-ը և spread()-ը կհեռացվեն:
Հեդլի Ուիքհեմ: Որոշ չափով. Մենք այլևս խորհուրդ չենք տա օգտագործել այս գործառույթները և ուղղել դրանցում առկա սխալները, սակայն դրանք կշարունակեն ներկա լինել փաթեթում իրենց ներկա վիճակում:
Պարունակություն
Եթե դուք հետաքրքրված եք տվյալների վերլուծությամբ, ապա ձեզ կարող է հետաքրքրել իմը հեռագիր и youtube ալիքներ. Բովանդակության մեծ մասը նվիրված է R լեզվին։
Նպատակ կոկիկ — օգնում է ձեզ տվյալները բերել այսպես կոչված կոկիկ ձևի: Մաքուր տվյալներն այն տվյալներն են, որտեղ՝
Յուրաքանչյուր փոփոխական գտնվում է սյունակում:
Յուրաքանչյուր դիտարկում մի լար է:
Յուրաքանչյուր արժեք բջիջ է:
Վերլուծություններ կատարելիս շատ ավելի հեշտ և հարմար է աշխատել տվյալների հետ, որոնք ներկայացված են կոկիկ տվյալների մեջ:
Հիմնական գործառույթները ներառված են tidyr փաթեթում
tidyr-ը պարունակում է մի շարք գործառույթներ, որոնք նախատեսված են աղյուսակները փոխակերպելու համար.
fill() - լրացնել բաց թողնված արժեքները սյունակում նախորդ արժեքներով.
separate() — բաժանում է մի դաշտը մի քանիսի՝ օգտագործելով տարանջատիչ.
unite() — կատարում է մի քանի դաշտեր մեկում միավորելու օպերացիա՝ ֆունկցիայի հակադարձ գործողություն separate();
pivot_longer() — ֆունկցիա, որը տվյալների լայն ձևաչափից փոխակերպում է երկար ձևաչափի;
pivot_wider() - ֆունկցիա, որը փոխակերպում է տվյալները երկար ձևաչափից լայն ձևաչափի: Ֆունկցիայի կողմից կատարվողի հակառակ գործողությունը pivot_longer().
gather()հնացած — ֆունկցիա, որը տվյալների լայն ձևաչափից փոխակերպում է երկար ձևաչափի;
spread()հնացած - ֆունկցիա, որը փոխակերպում է տվյալները երկար ձևաչափից լայն ձևաչափի: Ֆունկցիայի կողմից կատարվողի հակառակ գործողությունը gather().
Տվյալների լայն ձևաչափից երկար և հակառակը փոխարկելու նոր հայեցակարգ
Նախկինում գործառույթներն օգտագործվում էին այս տեսակի փոխակերպման համար gather() и spread(). Այս գործառույթների գոյության տարիների ընթացքում ակնհայտ դարձավ, որ օգտատերերի մեծամասնության համար, ներառյալ փաթեթի հեղինակը, այս գործառույթների անունները և դրանց փաստարկները այնքան էլ ակնհայտ չէին, և դժվարություններ առաջացրին դրանք գտնելու և հասկանալու, թե այս գործառույթներից որն է փոխակերպում: ամսաթվի շրջանակ լայնից մինչև երկար ձևաչափ և հակառակը:
Այս առումով ին կոկիկ Ավելացվել են երկու նոր, կարևոր գործառույթներ, որոնք նախատեսված են ամսաթվերի շրջանակները փոխակերպելու համար:
Նոր հատկություններ pivot_longer() и pivot_wider() ոգեշնչված էին փաթեթի որոշ առանձնահատկություններից cdata, ստեղծված Ջոն Մաունթի և Նինա Զումելի կողմից։
Փաթեթի նոր, ամենաարդիական տարբերակը տեղադրելու համար կոկիկ0.8.3.9000, որտեղ նոր հնարավորություններ կան, օգտագործեք հետևյալ կոդը.
devtools::install_github("tidyverse/tidyr")
Գրելու պահին այս գործառույթները հասանելի են միայն GitHub-ի փաթեթի մշակող տարբերակում:
Անցում դեպի նոր հնարավորություններ
Իրականում, դժվար չէ հին սկրիպտները տեղափոխել նոր գործառույթներով աշխատելու համար, ավելի լավ հասկանալու համար ես օրինակ կբերեմ հին գործառույթների փաստաթղթերից և ցույց կտամ, թե ինչպես են նույն գործողությունները կատարվում՝ օգտագործելով նորերը: pivot_*() գործառույթները։
Փոխարկել լայն ձևաչափը երկար ձևաչափի:
Օրինակ կոդի հավաքման գործառույթի փաստաթղթերից
# example
library(dplyr)
stocks <- data.frame(
time = as.Date('2009-01-01') + 0:9,
X = rnorm(10, 0, 1),
Y = rnorm(10, 0, 2),
Z = rnorm(10, 0, 4)
)
# old
stocks_gather <- stocks %>% gather(key = stock,
value = price,
-time)
# new
stocks_long <- stocks %>% pivot_longer(cols = -time,
names_to = "stock",
values_to = "price")
Երկար ձևաչափի փոխակերպում լայն ձևաչափի:
Սփռված ֆունկցիայի փաստաթղթերից կոդ օրինակ
# old
stocks_spread <- stocks_gather %>% spread(key = stock,
value = price)
# new
stock_wide <- stocks_long %>% pivot_wider(names_from = "stock",
values_from = "price")
Որովհետեւ հետ աշխատելու վերը նշված օրինակներում pivot_longer() и pivot_wider(), սկզբնական աղյուսակում բաժնետոմսեր արգումենտներում թվարկված սյունակներ չկան անուններ_դեպի и արժեքներ_դեպի նրանց անունները պետք է լինեն չակերտների մեջ:
Աղյուսակ, որը կօգնի ձեզ ամենահեշտ պարզել, թե ինչպես անցնել նոր հայեցակարգի հետ աշխատելու կոկիկ.
Նշում հեղինակից
Ստորև բերված ամբողջ տեքստը հարմարվողական է, ես կասեի նույնիսկ ազատ թարգմանություն վինյետներ tidyverse գրադարանի պաշտոնական կայքից:
Տվյալների լայն ձևաչափից երկար ձևաչափի փոխակերպման պարզ օրինակ
pivot_longer () — երկարացնում է տվյալների հավաքածուները՝ նվազեցնելով սյունակների քանակը և ավելացնելով տողերի քանակը:
Հոդվածում ներկայացված օրինակները գործարկելու համար նախ անհրաժեշտ է միացնել անհրաժեշտ փաթեթները.
library(tidyr)
library(dplyr)
library(readr)
Ենթադրենք, որ մենք ունենք աղյուսակ՝ հարցման արդյունքներով, որը (ի թիվս այլ բաների) մարդկանց հարցրել է իրենց կրոնի և տարեկան եկամուտների մասին.
Այս աղյուսակը պարունակում է հարցվողների կրոնի տվյալները տողերով, և եկամուտների մակարդակները ցրված են սյունակների անուններով: Յուրաքանչյուր կատեգորիայի հարցվածների թիվը պահվում է բջիջների արժեքներում կրոնի և եկամտի մակարդակի խաչմերուկում: Աղյուսակը կոկիկ, ճիշտ ձևաչափի բերելու համար բավական է օգտագործել pivot_longer():
Առաջին փաստարկ մանյակներ, նկարագրում է, թե որ սյունակները պետք է միաձուլվեն: Այս դեպքում բոլոր սյունակները բացառությամբ ժամանակ.
փաստարկ անուններ_դեպի տալիս է փոփոխականի անունը, որը կստեղծվի մեր միացրած սյունակների անուններից:
արժեքներ_դեպի տալիս է փոփոխականի անունը, որը կստեղծվի միավորված սյունակների բջիջների արժեքներում պահվող տվյալների հիման վրա:
Տեխնիկական
Սա փաթեթի նոր ֆունկցիոնալությունն է կոկիկ, որը նախկինում անհասանելի էր ժառանգական գործառույթների հետ աշխատելիս:
Հստակեցումը տվյալների շրջանակ է, որի յուրաքանչյուր տող համապատասխանում է նոր ելքային ամսաթվի շրջանակի մեկ սյունակին և երկու հատուկ սյունակին, որոնք սկսվում են հետևյալով.
Անուն պարունակում է սյունակի բնօրինակ անվանումը:
.արժեք պարունակում է սյունակի անունը, որը կպարունակի բջիջների արժեքները:
Հստակեցման մնացած սյունակները արտացոլում են, թե ինչպես է նոր սյունակում ցուցադրվելու սեղմված սյունակների անվանումը Անուն.
Հստակեցումը նկարագրում է սյունակի անվան մեջ պահվող մետատվյալները, յուրաքանչյուր սյունակի համար մեկ տողով և յուրաքանչյուր փոփոխականի համար մեկ սյունակով, որը համակցված է սյունակի անվան հետ, այս սահմանումը կարող է շփոթեցնող թվալ այս պահին, բայց մի քանի օրինակներ դիտելուց հետո այն կդառնա շատ: ավելի պարզ.
Հստակեցման իմաստն այն է, որ դուք կարող եք առբերել, փոփոխել և սահմանել նոր մետատվյալներ փոխարկվող տվյալների շրջանակի համար:
Աղյուսակը լայն ձևաչափից երկար ձևաչափի փոխարկելիս բնութագրերի հետ աշխատելու համար օգտագործեք գործառույթը pivot_longer_spec().
Ինչպես է այս ֆունկցիան աշխատում, որ այն վերցնում է ցանկացած ամսաթվի շրջանակ և առաջացնում է իր մետատվյալները վերը նկարագրված ձևով:
Որպես օրինակ՝ վերցնենք who տիրույթը, որը տրամադրվում է փաթեթին կոկիկ. Այս տվյալների բազան պարունակում է տուբերկուլյոզի դեպքերի վերաբերյալ Առողջապահության միջազգային կազմակերպության տրամադրած տեղեկատվություն:
who
#> # A tibble: 7,240 x 60
#> country iso2 iso3 year new_sp_m014 new_sp_m1524 new_sp_m2534
#> <chr> <chr> <chr> <int> <int> <int> <int>
#> 1 Afghan… AF AFG 1980 NA NA NA
#> 2 Afghan… AF AFG 1981 NA NA NA
#> 3 Afghan… AF AFG 1982 NA NA NA
#> 4 Afghan… AF AFG 1983 NA NA NA
#> 5 Afghan… AF AFG 1984 NA NA NA
#> 6 Afghan… AF AFG 1985 NA NA NA
#> 7 Afghan… AF AFG 1986 NA NA NA
#> 8 Afghan… AF AFG 1987 NA NA NA
#> 9 Afghan… AF AFG 1988 NA NA NA
#> 10 Afghan… AF AFG 1989 NA NA NA
#> # … with 7,230 more rows, and 53 more variables
Եկեք կառուցենք դրա ճշգրտումը:
spec <- who %>%
pivot_longer_spec(new_sp_m014:newrel_f65, values_to = "count")
դաշտերը երկիր, isoxnumx, isoxnumx արդեն փոփոխականներ են։ Մեր խնդիրն է շրջել սյունակները new_sp_m014 մասին newrel_f65.
Այս սյունակների անունները պահպանում են հետևյալ տեղեկությունները.
Նախածանց new_ ցույց է տալիս, որ սյունակը պարունակում է տվյալներ տուբերկուլյոզի նոր դեպքերի վերաբերյալ, ընթացիկ ամսաթվերի շրջանակը պարունակում է տեղեկատվություն միայն նոր հիվանդությունների մասին, ուստի այս նախածանցը ներկայիս համատեքստում որևէ նշանակություն չունի:
sp/rel/sp/ep նկարագրում է հիվանդության ախտորոշման մեթոդ.
Վերջապես, մեր ստեղծած ճշգրտումը սկզբնական ամսաթվի շրջանակում կիրառելու համար ով մենք պետք է փաստարկ օգտագործենք մասնագիրն ֆունկցիայի մեջ pivot_longer().
who %>% pivot_longer(spec = spec)
#> # A tibble: 405,440 x 8
#> country iso2 iso3 year diagnosis gender age count
#> <chr> <chr> <chr> <int> <chr> <fct> <ord> <int>
#> 1 Afghanistan AF AFG 1980 sp m 014 NA
#> 2 Afghanistan AF AFG 1980 sp m 1524 NA
#> 3 Afghanistan AF AFG 1980 sp m 2534 NA
#> 4 Afghanistan AF AFG 1980 sp m 3544 NA
#> 5 Afghanistan AF AFG 1980 sp m 4554 NA
#> 6 Afghanistan AF AFG 1980 sp m 5564 NA
#> 7 Afghanistan AF AFG 1980 sp m 65 NA
#> 8 Afghanistan AF AFG 1980 sp f 014 NA
#> 9 Afghanistan AF AFG 1980 sp f 1524 NA
#> 10 Afghanistan AF AFG 1980 sp f 2534 NA
#> # … with 405,430 more rows
Այն ամենը, ինչ մենք պարզապես արել ենք, կարող է սխեմատիկորեն պատկերվել հետևյալ կերպ.
Հստակեցում, օգտագործելով բազմաթիվ արժեքներ (.value)
Վերևի օրինակում բնութագրերի սյունակը .արժեք պարունակում էր միայն մեկ արժեք, շատ դեպքերում դա այդպես է:
Բայց երբեմն կարող է առաջանալ իրավիճակ, երբ անհրաժեշտ է տվյալներ հավաքել տարբեր արժեքներով տվյալների տեսակներով սյունակներից: Օգտագործելով ժառանգական գործառույթ spread() դա բավականին դժվար կլիներ անել:
Ստորև բերված օրինակը վերցված է վինյետներ փաթեթին տվյալներ.աղյուսակ.
Ստեղծված ամսաթվերի շրջանակը պարունակում է տվյալներ յուրաքանչյուր տողում մեկ ընտանիքի երեխաների մասին: Ընտանիքները կարող են ունենալ մեկ կամ երկու երեխա: Յուրաքանչյուր երեխայի համար տրամադրվում են տվյալներ ծննդյան ամսաթվի և սեռի վերաբերյալ, և յուրաքանչյուր երեխայի տվյալները առանձին սյունակներում են, մեր խնդիրն է այդ տվյալները բերել ճիշտ ձևաչափի վերլուծության համար:
Խնդրում ենք նկատի ունենալ, որ մենք ունենք երկու փոփոխական՝ յուրաքանչյուր երեխայի մասին տեղեկություններով՝ նրանց սեռը և ծննդյան ամսաթիվը (սյունակները՝ նախածանցով նետել պարունակում է ծննդյան ամսաթիվ, նախածանցով սյունակներ սեռը պարունակում է երեխայի սեռը): Ակնկալվող արդյունքն այն է, որ դրանք պետք է հայտնվեն առանձին սյունակներում: Մենք կարող ենք դա անել՝ ստեղծելով հստակեցում, որում սյունակը .value կունենա երկու տարբեր նշանակություն.
spec <- family %>%
pivot_longer_spec(-family) %>%
separate(col = name, into = c(".value", "child"))%>%
mutate(child = parse_number(child))
#> # A tibble: 4 x 3
#> .name .value child
#> <chr> <chr> <dbl>
#> 1 dob_child1 dob 1
#> 2 dob_child2 dob 2
#> 3 gender_child1 gender 1
#> 4 gender_child2 gender 2
Այսպիսով, եկեք քայլ առ քայլ նայենք վերը նշված ծածկագրի կատարած գործողություններին:
pivot_longer_spec(-family) — ստեղծել հստակեցում, որը սեղմում է բոլոր առկա սյունակները, բացառությամբ ընտանիքի սյունակի:
separate(col = name, into = c(".value", "child")) - բաժանել սյունակը Անուն, որը պարունակում է սկզբնաղբյուրի դաշտերի անվանումները՝ օգտագործելով ընդգծումը և մուտքագրելով ստացված արժեքները սյունակներում .արժեք и երեխա.
mutate(child = parse_number(child)) - փոխակերպել դաշտի արժեքները երեխա տեքստից մինչև թվային տվյալների տեսակ:
Այժմ մենք կարող ենք կիրառել ստացված ճշգրտումը սկզբնական տվյալների շրջանակին և աղյուսակը բերել ցանկալի ձևի:
Մենք օգտագործում ենք փաստարկ na.rm = TRUE, քանի որ տվյալների ներկայիս ձևը ստիպում է լրացուցիչ տողեր ստեղծել գոյություն չունեցող դիտարկումների համար։ Որովհետեւ 2-րդ ընտանիքն ունի միայն մեկ երեխա, na.rm = TRUE երաշխավորում է, որ 2-րդ ընտանիքը կունենա մեկ տող ելքում:
Ամսաթվերի շրջանակները երկարից լայն ձևաչափի փոխակերպում
pivot_wider() - հակադարձ փոխակերպումն է, և հակառակը մեծացնում է ամսաթվի շրջանակի սյունակների քանակը՝ կրճատելով տողերի քանակը։
Այս տեսակի փոխակերպումը չափազանց հազվադեպ է օգտագործվում տվյալների ճշգրիտ ձևի բերելու համար, այնուամենայնիվ, այս տեխնիկան կարող է օգտակար լինել շնորհանդեսներում օգտագործվող առանցքային աղյուսակներ ստեղծելու կամ որոշ այլ գործիքների հետ ինտեգրվելու համար:
Իրականում գործառույթները pivot_longer() и pivot_wider() սիմետրիկ են և արտադրում են միմյանց հակադարձ գործողություններ, այսինքն. df %>% pivot_longer(spec = spec) %>% pivot_wider(spec = spec) и df %>% pivot_wider(spec = spec) %>% pivot_longer(spec = spec) կվերադարձնի բնօրինակը df.
Աղյուսակը լայն ձևաչափի փոխակերպելու ամենապարզ օրինակը
Ցույց տալու համար, թե ինչպես է գործում գործառույթը pivot_wider() մենք կօգտագործենք տվյալների բազան ձուկ_հանդիպումներ, որը պահպանում է տեղեկատվություն այն մասին, թե ինչպես են տարբեր կայանները գրանցում ձկների շարժումը գետի երկայնքով։
#> # A tibble: 114 x 3
#> fish station seen
#> <fct> <fct> <int>
#> 1 4842 Release 1
#> 2 4842 I80_1 1
#> 3 4842 Lisbon 1
#> 4 4842 Rstr 1
#> 5 4842 Base_TD 1
#> 6 4842 BCE 1
#> 7 4842 BCW 1
#> 8 4842 BCE2 1
#> 9 4842 BCW2 1
#> 10 4842 MAE 1
#> # … with 104 more rows
Շատ դեպքերում, այս աղյուսակը կլինի ավելի տեղեկատվական և ավելի հեշտ օգտագործելի, եթե յուրաքանչյուր կայանի մասին տեղեկատվություն ներկայացնեք առանձին սյունակում:
fish_encounters %>% pivot_wider(names_from = station, values_from = seen)
#> # A tibble: 19 x 12
#> fish Release I80_1 Lisbon Rstr Base_TD BCE BCW BCE2 BCW2 MAE
#> <fct> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
#> 1 4842 1 1 1 1 1 1 1 1 1 1
#> 2 4843 1 1 1 1 1 1 1 1 1 1
#> 3 4844 1 1 1 1 1 1 1 1 1 1
#> 4 4845 1 1 1 1 1 NA NA NA NA NA
#> 5 4847 1 1 1 NA NA NA NA NA NA NA
#> 6 4848 1 1 1 1 NA NA NA NA NA NA
#> 7 4849 1 1 NA NA NA NA NA NA NA NA
#> 8 4850 1 1 NA 1 1 1 1 NA NA NA
#> 9 4851 1 1 NA NA NA NA NA NA NA NA
#> 10 4854 1 1 NA NA NA NA NA NA NA NA
#> # … with 9 more rows, and 1 more variable: MAW <int>
Այս տվյալների հավաքածուն գրանցում է միայն այն տեղեկությունը, երբ կայանը հայտնաբերել է ձուկ, այսինքն. եթե որևէ ձուկ չի գրանցվել ինչ-որ կայանի կողմից, ապա այդ տվյալները աղյուսակում չեն լինի: Սա նշանակում է, որ ելքը լցվելու է ԱԺ-ով:
Սակայն այս դեպքում մենք գիտենք, որ արձանագրության բացակայությունը նշանակում է, որ ձուկը չի երևացել, ուստի կարող ենք օգտագործել փաստարկը արժեքներ_լրացնել ֆունկցիայի մեջ pivot_wider() և լրացրեք այս բաց թողնված արժեքները զրոներով.
Բազմաթիվ աղբյուրի փոփոխականներից սյունակի անուն ստեղծելը
Պատկերացրեք, որ մենք ունենք աղյուսակ, որը պարունակում է ապրանքի, երկրի և տարվա համադրություն: Փորձարկման ամսաթվի շրջանակ ստեղծելու համար կարող եք գործարկել հետևյալ կոդը.
df <- expand_grid(
product = c("A", "B"),
country = c("AI", "EI"),
year = 2000:2014
) %>%
filter((product == "A" & country == "AI") | product == "B") %>%
mutate(value = rnorm(nrow(.)))
#> # A tibble: 45 x 4
#> product country year value
#> <chr> <chr> <int> <dbl>
#> 1 A AI 2000 -2.05
#> 2 A AI 2001 -0.676
#> 3 A AI 2002 1.60
#> 4 A AI 2003 -0.353
#> 5 A AI 2004 -0.00530
#> 6 A AI 2005 0.442
#> 7 A AI 2006 -0.610
#> 8 A AI 2007 -2.77
#> 9 A AI 2008 0.899
#> 10 A AI 2009 -0.106
#> # … with 35 more rows
Մեր խնդիրն է ընդլայնել տվյալների շրջանակը, որպեսզի մեկ սյունակ պարունակի տվյալներ ապրանքի և երկրի յուրաքանչյուր համակցության համար: Դա անելու համար պարզապես անցեք փաստարկի մեջ անուններ_ից վեկտոր, որը պարունակում է միավորվող դաշտերի անունները:
Կարող եք նաև կիրառել առանձնահատկություններ որևէ ֆունկցիայի համար pivot_wider(). Բայց երբ ներկայացվում է pivot_wider() ճշգրտումը կատարում է հակառակ փոխակերպումը pivot_longer()Սյունակներում նշված են Անուն, օգտագործելով արժեքները .արժեք և այլ սյունակներ:
Այս տվյալների բազայի համար դուք կարող եք ստեղծել հատուկ ճշգրտում, եթե ցանկանում եք, որ յուրաքանչյուր հնարավոր երկիր և արտադրանքի համակցություն ունենա իր սեփական սյունակը, ոչ միայն տվյալների մեջ առկաները.
#> # A tibble: 4 x 4
#> .name product country .value
#> <chr> <chr> <chr> <chr>
#> 1 A_AI A AI value
#> 2 A_EI A EI value
#> 3 B_AI B AI value
#> 4 B_EI B EI value
df %>% pivot_wider(spec = spec) %>% head()
#> # A tibble: 6 x 5
#> year A_AI A_EI B_AI B_EI
#> <int> <dbl> <dbl> <dbl> <dbl>
#> 1 2000 -2.05 NA 0.607 1.20
#> 2 2001 -0.676 NA 1.65 -0.114
#> 3 2002 1.60 NA -0.0245 0.501
#> 4 2003 -0.353 NA 1.30 -0.459
#> 5 2004 -0.00530 NA 0.921 -0.0589
#> 6 2005 0.442 NA -1.55 0.594
Նոր tidyr հայեցակարգի հետ աշխատելու մի քանի առաջադեմ օրինակներ
Տվյալների մաքրում` օգտագործելով ԱՄՆ մարդահամարի եկամուտների և վարձակալության տվյալների բազան որպես օրինակ:
Տվյալների հավաքածու մեզ_վարձույթի_եկամուտ պարունակում է միջին եկամուտի և վարձակալության մասին տեղեկատվություն ԱՄՆ-ի յուրաքանչյուր նահանգի համար 2017 թվականի համար (տվյալները հասանելի են փաթեթում Tidycensus).
us_rent_income
#> # A tibble: 104 x 5
#> GEOID NAME variable estimate moe
#> <chr> <chr> <chr> <dbl> <dbl>
#> 1 01 Alabama income 24476 136
#> 2 01 Alabama rent 747 3
#> 3 02 Alaska income 32940 508
#> 4 02 Alaska rent 1200 13
#> 5 04 Arizona income 27517 148
#> 6 04 Arizona rent 972 4
#> 7 05 Arkansas income 23789 165
#> 8 05 Arkansas rent 709 5
#> 9 06 California income 29454 109
#> 10 06 California rent 1358 3
#> # … with 94 more rows
Այն տեսքով, որով տվյալները պահվում են տվյալների բազայում մեզ_վարձույթի_եկամուտ Նրանց հետ աշխատելը չափազանց անհարմար է, ուստի մենք կցանկանայինք ստեղծել տվյալների հավաքածու սյունակներով. վարձում, rent_moe, Գալ, եկամուտ_մեկ. Այս ճշգրտումը ստեղծելու բազմաթիվ եղանակներ կան, բայց հիմնական կետն այն է, որ մենք պետք է գեներացնենք փոփոխական արժեքների յուրաքանչյուր համադրություն և նախահաշիվ / Moeև այնուհետև ստեղծեք սյունակի անվանումը:
Երբեմն տվյալների հավաքածուն ցանկալի ձևի բերելը պահանջում է մի քանի քայլ:
Տվյալների հավաքածու world_bank_pop պարունակում է Համաշխարհային բանկի տվյալներ յուրաքանչյուր երկրի բնակչության թվի վերաբերյալ 2000-ից 2018 թվականներին։
Մեր նպատակն է ստեղծել կոկիկ տվյալների հավաքածու յուրաքանչյուր փոփոխականով իր սյունակում: Անհասկանալի է, թե կոնկրետ ինչ քայլեր են անհրաժեշտ, բայց մենք կսկսենք ամենաակնհայտ խնդրից՝ տարին տարածված է բազմաթիվ սյունակներում:
Դա շտկելու համար դուք պետք է օգտագործեք գործառույթը pivot_longer().
Հաջորդ քայլը ցուցիչի փոփոխականին նայելն է: pop2 %>% count(indicator)
#> # A tibble: 4 x 2
#> indicator n
#> <chr> <int>
#> 1 SP.POP.GROW 4752
#> 2 SP.POP.TOTL 4752
#> 3 SP.URB.GROW 4752
#> 4 SP.URB.TOTL 4752
Այնտեղ, որտեղ SP.POP.GROW-ը բնակչության աճն է, SP.POP.TOTL-ը՝ ընդհանուր բնակչությունը, իսկ SP.URB: * նույնը, բայց միայն քաղաքային տարածքների համար: Եկեք այս արժեքները բաժանենք երկու փոփոխականների՝ տարածք – տարածք (ընդհանուր կամ քաղաքային) և փաստացի տվյալներ պարունակող փոփոխական (բնակչություն կամ աճ).
Այս ցուցակի աղյուսակավորումը բավականին դժվար է, քանի որ չկա որևէ փոփոխական, որը կբացահայտի, թե որ կոնտակտին է պատկանում տվյալ տվյալները: Մենք կարող ենք դա շտկել՝ նշելով, որ յուրաքանչյուր նոր կոնտակտի տվյալները սկսվում են «անունով», այնպես որ մենք կարող ենք ստեղծել եզակի նույնացուցիչ և ավելացնել այն մեկով ամեն անգամ, երբ դաշտի սյունակը պարունակում է «անուն» արժեքը.
#> # A tibble: 6 x 3
#> field value person_id
#> <chr> <chr> <int>
#> 1 name Jiena McLellan 1
#> 2 company Toyota 1
#> 3 name John Smith 2
#> 4 company google 2
#> 5 email [email protected] 2
#> 6 name Huxley Ratcliffe 3
Այժմ, երբ մենք ունենք եզակի ID յուրաքանչյուր կոնտակտի համար, մենք կարող ենք դաշտը և արժեքը վերածել սյունակների.
#> # A tibble: 3 x 4
#> person_id name company email
#> <int> <chr> <chr> <chr>
#> 1 1 Jiena McLellan Toyota <NA>
#> 2 2 John Smith google [email protected]
#> 3 3 Huxley Ratcliffe <NA> <NA>
Ամփոփում
Իմ անձնական կարծիքն այն է, որ նոր հայեցակարգը կոկիկ իսկապես ավելի ինտուիտիվ և ֆունկցիոնալությամբ զգալիորեն գերազանցում է ժառանգական գործառույթներին spread() и gather(). Հուսով եմ, որ այս հոդվածը օգնեց ձեզ զբաղվել pivot_longer() и pivot_wider().