5 удобни опции в R data.table's fread

Подобно на всички функции в пакета data.table R, fread е бърз. Много бързо. Но има нещо повече за ужас, отколкото за скорост. Той има няколко полезни функции и опции при импортиране на външни данни в R. Ето пет от най-полезните.

Забележка: Ако искате да продължите, изтеглете CSV файла на New York Times за ежедневни случаи Covid-19 от окръг САЩ на //github.com/nytimes/covid-19-data/raw/master/us-counties. csv.

Използвайте опцията nrow на fread

Файлът ви голям ли е? Искате ли да разгледате структурата му, преди да импортирате цялото нещо - без да се налага да го отваряте в текстов редактор или Excel? Използвайте nrowsопцията на fread, за да импортирате само част от файл за проучване .

Кодът по-долу импортира само първите 10 реда на CSV.

mydt10 <- fread ("us-counties.csv", nrows = 10)

Ако просто искате да видите имена на колони без никакви данни, можете да използвате nrows = 0

Използвайте опцията за избор на fread

След като познаете файловата структура, можете да изберете кои колони да импортирате . selectОпцията на fread ви позволява да изберете колони, които искате да запазите. selectвзема вектор от имена на колони или номера на позиции на колони . Ако имената, те трябва да бъдат в кавички, както повечето вектори на символни низове:

mydt <- fread ("us-counties.csv",

select = c ("дата", "окръг", "държава", "случаи"))

Както винаги, числата не се нуждаят от кавички:

mydt <- fread ("us-counties.csv", select = c (1,2,3,5))

Можете да използвате R обект с вектор от имена на колони във fread, както можете да видите в тази следваща група код. Създавам вектор my_cols с дата, окръг, щат и случаи; тогава използвам този вектор във фреада.

my_cols <- c ("дата", "окръг", "щат", "случаи")

mydt <- fread ("us-counties.csv", select = my_cols)

Обратното на selectе drop. Можете да изберете да импортирате всички колони с изключение на посочените от вас drop, като например:

mydt <- fread ("us-counties.csv", drop = c ("fips", "deaths"))

Подобно на select, dropвзема вектор от имена на колони или числови позиции. 

Използвайте фреада с grep

Ако сте запознати с Unix, можете да  изпълнявате инструменти от командния ред направо от фреада . Например, ако просто исках данни от Калифорния, бих могъл да използвам grep само за импортиране на редове, които съдържат текста „Калифорния“. Имайте предвид, че това търси всеки цял ред като текстов низ, а не като конкретна колона, така че вашите данни трябва да бъдат във формат, където това има смисъл.

ca <- fread ("grep California us-counties.csv")

За съжаление grep не разбира имената на колоните на оригиналния файл, така че в крайна сметка получавате имена по подразбиране.

глава (ca) V1 V2 V3 V4 V5 V6 1: 2020-01-25 Orange California 6059 1 0 2: 2020-01-26 Los Angeles California 6037 1 0 3: 2020-01-26 Orange California 6059 1 0 4: 2020 -01-27 Лос Анджелис Калифорния 6037 1 0 5: 2020-01-27 Ориндж Калифорния 6059 1 0 6: 2020-01-28 Лос Анджелис Калифорния 6037 1 0

Fread обаче ни позволява да посочим имена на колони с col.namesопцията. Мога да задам имената въз основа на имена от mydt10, които създадох по-горе.

ca глава (ca) дата окръг щат fips случаи смъртни случаи 1: 2020-01-25 Orange California 6059 1 0 2: 2020-01-26 Los Angeles California 6037 1 0 3: 2020-01-26 Orange California 6059 1 0 4: 2020-01-27 Лос Анджелис Калифорния 6037 1 0 5: 2020-01-27 Ориндж Калифорния 6059 1 0 6: 2020-01-28 Лос Анджелис Калифорния 6037 1 0

Можем да използваме и регулярни изрази, с -Eопцията grep , която ни позволява да правим по-сложни търсения, като например да търсим четири състояния наведнъж. 

States4 <- fread (cmd = "grep -E 'Тексас | Аризона | Флорида | Южна Каролина' us-counties.csv",

col.names = имена (mydt10))

Още веднъж напомняне: Това търси всяко от тези имена на състояния навсякъде в реда , а не само в колоната на състоянието. Ако стартирате горния код и проверите с кои щати са включени в резултатите unique(states4$state), ще видите Оклахома и Мисури в колоната на щатите заедно с Тексас, Аризона, Флорида и Южна Каролина. Това е така, защото и Оклахома, и Мисури имат окръзи с име Тексас.

И така, grep по време на импортиране на файлове е начин за филтриране на много данни, които не искате от много голям набор от данни; но не гарантира, че получавате само това, което искате. След този вид импортиране все пак трябва да филтрирате специално данни за колони, за да сте сигурни, че не сте получили нещо неочаквано.

Използвайте опцията colClasses на fread

Можете да задавате класове на колони по време на импортиране - само за няколко колони, а не за всяка. Например колоната за дата в тези данни идва като символни низове, въпреки че е във формат година-месец-ден. Можем да зададем колоната с име дата на тип данни Дата  по време на импортиране, използвайки colClassesопцията 

mydt <- fread ("us-counties.csv", colClasses = c ("date" = "Date"))

Сега датите са дати.

> str (mydt) Класове „data.table“ и „data.frame“: 322651 obs. от 6 променливи: $ date: Дата, формат: "2020-01-21" "2020-01-22" "2020-01-23" ... $ графство: chr "Snohomish" "Snohomish" "Snohomish" "Cook "... $ state: chr" Washington "" Washington "" Washington "" Illinois "... $ fips: int 53061 53061 53061 17031 53061 6059 17031 53061 4013 6037 ... $ случаи: int 1 1 1 1 1 1 1 1 1 1 ... $ смъртни случаи: int 0 0 0 0 0 0 0 0 0 0 ...

Използвайте fread за компресирани файлове

Можете да импортирате компресиран файл, без да го разархивирате първо . fread може да импортира директно gz и bz2 файлове, като например  mydt <- fread("myfile.gz"). Ако трябва да импортирате zip файл, можете да го разархивирате със unzipсистемната команда в рамките на fread, като използвате синтаксиса  mydt <- fread(cmd = 'unzip -cq myfile.zip').

За повече съвети за R отидете на страницата „Направете повече с R“.