Базовый R умеет не так много. Сила R во множестве пакетов, написанных добровольцами. Пакеты содержат вкусные и сочные функции и расширяют возможности R.
Чтобы начать использовать любой пакет, скажем, tidyverse
, нужно сделать два действия.
Установка пакеты: в меню Rstudio Tools
- Install packages
.
Подключаем пакет tidyverse
, rio
и skimr
!
library(tidyverse)
## ── Attaching packages ────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 2.2.1.9000 ✔ purrr 0.2.5
## ✔ tibble 1.4.2 ✔ dplyr 0.7.5
## ✔ tidyr 0.8.1 ✔ stringr 1.3.1
## ✔ readr 1.1.1 ✔ forcats 0.3.0
## Warning: package 'tibble' was built under R version 3.4.3
## Warning: package 'purrr' was built under R version 3.4.4
## Warning: package 'forcats' was built under R version 3.4.3
## ── Conflicts ───────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
library(rio)
## Warning: package 'rio' was built under R version 3.4.4
library(skimr)
## Warning: package 'skimr' was built under R version 3.4.4
Пакет tidyverse
- это коллекция из множества пакетов. Например, в tidyverse
входят: - dplyr
для манипуляций с данными - ggplot2
для построения графиков - lubridate
для работы с датами во временных рядах
А два других: - rio
импортирует и экспортирует данные практически во все известные форматы; - skimr
считает самые разнообразные описательные статистики, которые только можно представить.
Если при подключении пакета возникает ошибка (Error), то скорее всего пакет не установлен и его нужно установить через меню Tools
- Install packages
.
Подключите пакеты lattice
и DataExplorer
. Не забудьте раскомментировать строки, убрав решетку #
.
library(lattice)
library(DataExplorer)
## Warning: package 'DataExplorer' was built under R version 3.4.3
Что умеют эти пакеты? - lattice
пригодится нам для графиков - DataExplorer
для быстрого автоматического графического анализа
Предварительно должен быть подключен пакет rio
.
После загрузки мы сразу проверяем целостность данных командой glimpse()
. Также разумно посмотреть на первые строки набора данных командой head()
и на последние командой tail()
.
some <- import('manipulate.sav')
glimpse(some)
## Observations: 100
## Variables: 7
## Warning in as.POSIXlt.POSIXct(x, tz): unknown timezone 'zone/tz/2018c.1.0/
## zoneinfo/Europe/Moscow'
## $ ID <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1...
## $ Sex <chr> "M", "M", "M", "M", "M", "F", "M", "F", "M", "M"...
## $ FundCode <chr> "HOS", "HOS", "HOS", "TAC", "TAC", "HOS", "HOS",...
## $ ArrivalDate <dttm> 2005-03-10 03:04:00, 2004-08-27 12:32:00, 2005-...
## $ EmergDate <dttm> 2005-03-10 05:09:00, 2004-08-27 13:10:00, 2005-...
## $ DischargeDate <dttm> 2005-03-16 13:00:00, 2004-08-27 14:00:00, 2005-...
## $ LengthofStay <dbl> 6, 0, 5, 0, 10, 16, 2, 0, 5, 7, 9, 3, 1, 5, 8, 0...
head(some)
## ID Sex FundCode ArrivalDate EmergDate
## 1 1 M HOS 2005-03-10 03:04:00 2005-03-10 05:09:00
## 2 2 M HOS 2004-08-27 12:32:00 2004-08-27 13:10:00
## 3 3 M HOS 2005-02-19 19:18:00 2005-02-20 03:39:00
## 4 4 M TAC 2007-09-24 09:35:00 2007-09-24 11:38:00
## 5 5 M TAC 2009-01-19 08:39:00 2009-01-19 22:06:00
## 6 6 F HOS 2008-12-16 08:58:00 2008-12-17 18:59:00
## DischargeDate LengthofStay
## 1 2005-03-16 13:00:00 6
## 2 2004-08-27 14:00:00 0
## 3 2005-02-25 01:00:00 5
## 4 2007-09-24 17:05:00 0
## 5 2009-01-29 13:01:00 10
## 6 2009-01-02 05:45:00 16
tail(some)
## ID Sex FundCode ArrivalDate EmergDate
## 95 95 M HOS 2005-09-11 02:41:59 2005-09-11 11:05:00
## 96 96 F DVA 2005-09-17 15:57:00 2005-09-17 16:17:00
## 97 97 M HOS 2005-09-26 18:11:00 2005-09-26 23:54:00
## 98 98 F TAC 2005-10-02 13:44:00 2005-10-02 22:42:00
## 99 99 M TAC 2005-10-25 00:01:00 2005-10-25 04:16:00
## 100 100 M HOS 2005-10-30 15:35:00 2005-10-31 11:27:59
## DischargeDate LengthofStay
## 95 2005-09-14 10:00:00 3
## 96 2005-09-23 13:30:00 5
## 97 2005-10-03 11:38:00 6
## 98 2005-10-06 16:00:00 4
## 99 2005-10-28 12:08:00 3
## 100 2005-11-04 10:49:00 4
Сколько наблюдений? 100
Упражнение 2.
Загрузите данные cola.dta
из stata. Посмотрите на первые и последние строки. - Сколько переменных в наборе данных? 5 - Сколько наблюдений? 5466
cola <- import('cola.dta')
glimpse(cola)
## Observations: 5,466
## Variables: 5
## $ id <dbl> 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, ...
## $ choice <dbl> 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, ...
## $ price <dbl> 1.79, 1.79, 1.79, 1.79, 1.79, 0.89, 1.41, 0.84, 0.89, ...
## $ feature <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, ...
## $ display <dbl> 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, ...
head(cola)
## id choice price feature display
## 1 1 0 1.79 0 0
## 2 1 0 1.79 0 0
## 3 1 1 1.79 0 0
## 4 2 0 1.79 0 0
## 5 2 0 1.79 0 0
## 6 2 1 0.89 1 1
tail(cola)
## id choice price feature display
## 5461 1821 0 1.39 0 0
## 5462 1821 1 0.89 0 0
## 5463 1821 0 1.39 0 0
## 5464 1822 0 1.19 1 0
## 5465 1822 0 0.88 1 1
## 5466 1822 1 0.88 1 1
Исключение составляет только загрузка данных eviews
. Пакет rio
пока что не умеет их импортировать. Приходится использовать другой пакет :)
library(hexView) # подключаем специальный пакет для чтения данных eviews
housing <- readEViews('housing.wf1')
## Warning in readEViews("housing.wf1"): Skipping boilerplate variable
## Warning in readEViews("housing.wf1"): Skipping boilerplate variable
glimpse(housing)
## Observations: 546
## Variables: 12
## $ AIRCO <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0,...
## $ BATHRMS <dbl> 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1,...
## $ BEDROOMS <dbl> 3, 2, 3, 3, 2, 3, 3, 3, 3, 3, 3, 2, 3, 3, 2, 2, 3, 4,...
## $ DRIVEWAY <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,...
## $ FULLBASE <dbl> 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,...
## $ GARAGEPL <dbl> 1, 0, 0, 0, 0, 0, 2, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0,...
## $ GASHW <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...
## $ LOTSIZE <dbl> 5850, 4000, 3060, 6650, 6360, 4160, 3880, 4160, 4800,...
## $ PREFAREA <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...
## $ PRICE <dbl> 42000, 38500, 49500, 60500, 61000, 66000, 66000, 6900...
## $ RECROOM <dbl> 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,...
## $ STORIES <dbl> 2, 1, 1, 2, 1, 1, 2, 3, 1, 4, 1, 1, 2, 1, 1, 1, 2, 3,...
ggplot2
набор данных про бриллианты.df <- diamonds
Для описательных статистик понадобится подключённый ранее пакет skimr
.
skim(df)
## Skim summary statistics
## n obs: 53940
## n variables: 10
## Warning: package 'bindrcpp' was built under R version 3.4.4
##
## Variable type: factor
## variable missing complete n n_unique
## clarity 0 53940 53940 8
## color 0 53940 53940 7
## cut 0 53940 53940 5
## top_counts ordered
## SI1: 13065, VS2: 12258, SI2: 9194, VS1: 8171 TRUE
## G: 11292, E: 9797, F: 9542, H: 8304 TRUE
## Ide: 21551, Pre: 13791, Ver: 12082, Goo: 4906 TRUE
##
## Variable type: integer
## variable missing complete n mean sd p0 p25 p50 p75 p100
## price 0 53940 53940 3932.8 3989.44 326 950 2401 5324.25 18823
## hist
## ▇▃▂▁▁▁▁▁
##
## Variable type: numeric
## variable missing complete n mean sd p0 p25 p50 p75 p100
## carat 0 53940 53940 0.8 0.47 0.2 0.4 0.7 1.04 5.01
## depth 0 53940 53940 61.75 1.43 43 61 61.8 62.5 79
## table 0 53940 53940 57.46 2.23 43 56 57 59 95
## x 0 53940 53940 5.73 1.12 0 4.71 5.7 6.54 10.74
## y 0 53940 53940 5.73 1.14 0 4.72 5.71 6.54 58.9
## z 0 53940 53940 3.54 0.71 0 2.91 3.53 4.04 31.8
## hist
## ▇▅▁▁▁▁▁▁
## ▁▁▁▃▇▁▁▁
## ▁▅▇▁▁▁▁▁
## ▁▁▁▇▇▃▁▁
## ▇▁▁▁▁▁▁▁
## ▇▃▁▁▁▁▁▁
Дальше будем строить гистограммы! Если нужно посмотреть по-быстрому, то можно сделать так:
qplot(data = df, x = carat)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Но вообще на графиках должны быть подписаны оси и название.
qplot(data = df, x = carat) +
labs(x = 'Вес', y = 'Количество', title = 'Распределение бриллиантов по весу')
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Потренируемся с качественными переменными и нарисуем гистограмму для качества огранки бриллианта.
qplot(data = df, x = cut) +
labs(x = 'Качество огранка', y = 'Количество', title = 'Распределение бриллиантов по огранке')
C помощью qplot
можно создавать и диаграммы рассеяния. Посмотрим сразу на цену бриллианта и его вес.
qplot(data = df, x = carat, y = price)
А можно визуализировать сразу несколько диаграмм! Для этого, например, используется пакет lattice
и функция splom
.
library(lattice) # загружаем пакет
splom(df[1:1000, c('carat', 'depth', 'table')]) # строим диаграммы рассеяния для 1000 наблюдений
Постройте гистограмму для цены бриллианта. Она находится в столбце price
набора данных под названием df
. Не забудьте подписать оси и придумать название.
qplot(data = df, x = price) +
labs(x = 'Цена', y = 'Количесвто', title = 'Гистограмма')
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Постройте диаграмму рассеяния: по оси абсцисс изобразите параметры бриллианта (столбец depth
), по оси ординат — цену (price
).
qplot(data = df, x = depth, y = price) +
labs(x = 'Параметры бриллианта', y = 'Цена', title = 'Диаграмма рассеяния')
Есть и пакеты для автоматического графического анализа данных, например, DataExplorer
.
Если до прихода гостей осталось 5 минут и нужно быстро глянуть на данные:
library(DataExplorer)
create_report(diamonds)
##
##
## processing file: report.rmd
##
|
| | 0%
|
|..... | 7%
## ordinary text without R code
##
##
|
|......... | 14%
## label: global_options (with options)
## List of 1
## $ include: logi FALSE
##
##
|
|.............. | 21%
## inline R code fragments
##
##
|
|................... | 29%
## label: data_structure
##
|
|....................... | 36%
## ordinary text without R code
##
##
|
|............................ | 43%
## label: plot_data_structure
##
|
|................................ | 50%
## ordinary text without R code
##
##
|
|..................................... | 57%
## label: missing_values
##
|
|.......................................... | 64%
## ordinary text without R code
##
##
|
|.............................................. | 71%
## label: histogram
##
|
|................................................... | 79%
## ordinary text without R code
##
##
|
|........................................................ | 86%
## label: bar
##
|
|............................................................ | 93%
## ordinary text without R code
##
##
|
|.................................................................| 100%
## label: correlation
## output file: /Users/ola/Documents/r_intro_2/docs/report.knit.md
## /Applications/RStudio.app/Contents/MacOS/pandoc/pandoc +RTS -K512m -RTS /Users/ola/Documents/r_intro_2/docs/report.utf8.md --to html4 --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash --output /Users/ola/Documents/r_intro_2/docs/report.html --smart --email-obfuscation none --self-contained --standalone --section-divs --table-of-contents --toc-depth 6 --template /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rmarkdown/rmd/h/default.html --no-highlight --variable highlightjs=1 --variable 'theme:cerulean' --include-in-header /var/folders/5f/kqgc20s95m9_xjdf66mk50q80000gn/T//RtmpZSljzm/rmarkdown-str3434d292f71.html --mathjax --variable 'mathjax-url:https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'
##
## Output created: report.html
##
##
## Report is generated at "/Users/ola/Documents/r_intro_2/docs/report.html".
Отобрать наблюдения по нескольким критериям можно с помощью команды filter()
Пример.
По каким критериям отобраны бриллианты?
diamonds2 <- filter(diamonds, price > mean(price), carat < mean(carat))
skim(diamonds2)
## Skim summary statistics
## n obs: 198
## n variables: 10
##
## Variable type: factor
## variable missing complete n n_unique top_counts
## clarity 0 198 198 5 VVS: 79, VVS: 48, VS1: 29, IF: 26
## color 0 198 198 6 D: 93, E: 47, F: 47, G: 6
## cut 0 198 198 5 Ide: 140, Ver: 39, Pre: 11, Goo: 6
## ordered
## TRUE
## TRUE
## TRUE
##
## Variable type: integer
## variable missing complete n mean sd p0 p25 p50 p75 p100
## price 0 198 198 4395.4 464.43 3936 4048.5 4240.5 4504 6607
## hist
## ▇▃▂▁▁▁▁▁
##
## Variable type: numeric
## variable missing complete n mean sd p0 p25 p50 p75 p100
## carat 0 198 198 0.71 0.052 0.51 0.7 0.71 0.74 0.79
## depth 0 198 198 61.51 0.93 58.4 61.1 61.6 62 65.4
## table 0 198 198 56.64 1.89 53 56 56 57 66
## x 0 198 198 5.73 0.15 5.21 5.7 5.75 5.83 6.03
## y 0 198 198 5.76 0.15 5.11 5.73 5.78 5.85 6.06
## z 0 198 198 3.53 0.095 3.13 3.51 3.55 3.58 3.74
## hist
## ▁▁▁▁▁▇▃▃
## ▁▁▃▇▅▁▁▁
## ▂▇▃▂▁▁▁▁
## ▁▁▁▁▅▇▅▁
## ▁▁▁▁▁▇▅▁
## ▁▁▁▁▂▇▃▁
Отберите бриллианты с длиной, переменная x
, больше 5 мм. - Чему равна их средняя цена? 5455.1
diamonds3 <- filter(df, x > 5)
skim(diamonds3)
## Skim summary statistics
## n obs: 36321
## n variables: 10
##
## Variable type: factor
## variable missing complete n n_unique
## clarity 0 36321 36321 8
## color 0 36321 36321 7
## cut 0 36321 36321 5
## top_counts ordered
## SI1: 9895, VS2: 8185, SI2: 8174, VS1: 5093 TRUE
## G: 7395, F: 6390, H: 6005, E: 5895 TRUE
## Ide: 12825, Pre: 9812, Ver: 8528, Goo: 3696 TRUE
##
## Variable type: integer
## variable missing complete n mean sd p0 p25 p50 p75 p100
## price 0 36321 36321 5455.1 4061.05 701 2370 4253 7108 18823
## hist
## ▇▆▃▂▁▁▁▁
##
## Variable type: numeric
## variable missing complete n mean sd p0 p25 p50 p75 p100
## carat 0 36321 36321 1.02 0.43 0.25 0.7 1 1.21 5.01
## depth 0 36321 36321 61.76 1.55 43 61 61.9 62.6 79
## table 0 36321 36321 57.71 2.28 43 56 57 59 95
## x 0 36321 36321 6.33 0.85 5.01 5.68 6.34 6.83 10.74
## y 0 36321 36321 6.33 0.9 4.11 5.7 6.34 6.82 58.9
## z 0 36321 36321 3.91 0.55 0 3.52 3.92 4.21 31.8
## hist
## ▇▇▂▁▁▁▁▁
## ▁▁▁▃▇▁▁▁
## ▁▃▇▁▁▁▁▁
## ▇▇▇▃▂▁▁▁
## ▇▁▁▁▁▁▁▁
## ▇▆▁▁▁▁▁▁
Перейдём к созданию новых переменных!
Мы добавим в набор данных логарифм цены каждого бриллианта. - Под каким названием добавлена переменная в набор данных? lprice
diamonds4 <- mutate(diamonds, lprice = log(price))
skim(diamonds4)
## Skim summary statistics
## n obs: 53940
## n variables: 11
##
## Variable type: factor
## variable missing complete n n_unique
## clarity 0 53940 53940 8
## color 0 53940 53940 7
## cut 0 53940 53940 5
## top_counts ordered
## SI1: 13065, VS2: 12258, SI2: 9194, VS1: 8171 TRUE
## G: 11292, E: 9797, F: 9542, H: 8304 TRUE
## Ide: 21551, Pre: 13791, Ver: 12082, Goo: 4906 TRUE
##
## Variable type: integer
## variable missing complete n mean sd p0 p25 p50 p75 p100
## price 0 53940 53940 3932.8 3989.44 326 950 2401 5324.25 18823
## hist
## ▇▃▂▁▁▁▁▁
##
## Variable type: numeric
## variable missing complete n mean sd p0 p25 p50 p75 p100
## carat 0 53940 53940 0.8 0.47 0.2 0.4 0.7 1.04 5.01
## depth 0 53940 53940 61.75 1.43 43 61 61.8 62.5 79
## lprice 0 53940 53940 7.79 1.01 5.79 6.86 7.78 8.58 9.84
## table 0 53940 53940 57.46 2.23 43 56 57 59 95
## x 0 53940 53940 5.73 1.12 0 4.71 5.7 6.54 10.74
## y 0 53940 53940 5.73 1.14 0 4.72 5.71 6.54 58.9
## z 0 53940 53940 3.54 0.71 0 2.91 3.53 4.04 31.8
## hist
## ▇▅▁▁▁▁▁▁
## ▁▁▁▃▇▁▁▁
## ▂▇▆▆▆▇▅▃
## ▁▅▇▁▁▁▁▁
## ▁▁▁▇▇▃▁▁
## ▇▁▁▁▁▁▁▁
## ▇▃▁▁▁▁▁▁
Добавьте в набор данных для каждого бриллианта стоимость одного карата. - Чему равна медианная стоимость одного карата? 3495.2
diamonds5 <- mutate(diamonds, carat_price = price/carat)
skim(diamonds5)
## Skim summary statistics
## n obs: 53940
## n variables: 11
##
## Variable type: factor
## variable missing complete n n_unique
## clarity 0 53940 53940 8
## color 0 53940 53940 7
## cut 0 53940 53940 5
## top_counts ordered
## SI1: 13065, VS2: 12258, SI2: 9194, VS1: 8171 TRUE
## G: 11292, E: 9797, F: 9542, H: 8304 TRUE
## Ide: 21551, Pre: 13791, Ver: 12082, Goo: 4906 TRUE
##
## Variable type: integer
## variable missing complete n mean sd p0 p25 p50 p75 p100
## price 0 53940 53940 3932.8 3989.44 326 950 2401 5324.25 18823
## hist
## ▇▃▂▁▁▁▁▁
##
## Variable type: numeric
## variable missing complete n mean sd p0 p25
## carat 0 53940 53940 0.8 0.47 0.2 0.4
## carat_price 0 53940 53940 4008.39 2012.67 1051.16 2477.94
## depth 0 53940 53940 61.75 1.43 43 61
## table 0 53940 53940 57.46 2.23 43 56
## x 0 53940 53940 5.73 1.12 0 4.71
## y 0 53940 53940 5.73 1.14 0 4.72
## z 0 53940 53940 3.54 0.71 0 2.91
## p50 p75 p100 hist
## 0.7 1.04 5.01 ▇▅▁▁▁▁▁▁
## 3495.2 4949.6 17828.85 ▇▇▂▁▁▁▁▁
## 61.8 62.5 79 ▁▁▁▃▇▁▁▁
## 57 59 95 ▁▅▇▁▁▁▁▁
## 5.7 6.54 10.74 ▁▁▁▇▇▃▁▁
## 5.71 6.54 58.9 ▇▁▁▁▁▁▁▁
## 3.53 4.04 31.8 ▇▃▁▁▁▁▁▁
Табличку с данными иногда приходится сортировать!
Мы последовательно выполним два действия, сортировку и отбор самых верхних строк.
diamonds6 <- arrange(diamonds, price) %>% head(3)
diamonds6
## # A tibble: 3 x 10
## carat cut color clarity depth table price x y z
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
## 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
## 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
Отсортируйте бриллианты по массе и отберите самые нижние пять строк.
diamonds7 <- arrange(df, carat) %>% tail(5)
diamonds7
## # A tibble: 5 x 10
## carat cut color clarity depth table price x y z
## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 4.01 Premium I I1 61 61 15223 10.1 10.1 6.17
## 2 4.01 Premium J I1 62.5 62 15223 10.0 9.94 6.24
## 3 4.13 Fair H I1 64.8 61 17329 10 9.85 6.43
## 4 4.5 Fair J I1 65.8 58 18531 10.2 10.2 6.72
## 5 5.01 Fair J I1 65.5 59 18018 10.7 10.5 6.98
С данными на русском языке иногда приходится повозиться: пакет rio
может не справляться с импортом русским букв.
Сейчас распространено две кодировки для русского текста: UTF-8 и CP1251. Более современной является UTF-8 и сохранять свои файлы разумно именно в ней. Однако приходится работать и с CP1251.
Перед нами два csv
файла с русскими буквами rus_utf8.csv
и rus_cp1251.csv
.
Проверьте, читаются ли эти файлы командой import()
data_utf <- import('rus_utf8.csv')
glimpse(data_utf)
## Observations: 3
## Variables: 3
## $ one <chr> "привет", "дорогой", "друг"
## $ two <int> 5, 5, 5
## $ three <int> 6, 7, 9
data_cp <- import('rus_cp1251.csv')
glimpse(data_cp)
## Observations: 3
## Variables: 3
## $ one <chr> "\xef\xf0\xe8\xe2\xe5\xf2", "\xe4\xee\xf0\xee\xe3\xee\xe...
## $ two <int> 5, 5, 5
## $ three <int> 6, 7, 9
Здесь на помощь приходят другие пакеты, например, функция read_csv
из пакета readr
:
data_cp2 <- read_csv('rus_cp1251.csv', locale = locale(encoding = 'CP1251'))
## Parsed with column specification:
## cols(
## one = col_character(),
## two = col_integer(),
## three = col_integer()
## )
glimpse(data_cp2)
## Observations: 3
## Variables: 3
## $ one <chr> "привет", "дорогой", "друг"
## $ two <int> 5, 5, 5
## $ three <int> 6, 7, 9
data_utf2 <- read_csv('rus_utf8.csv', locale = locale(encoding = 'UTF8'))
## Parsed with column specification:
## cols(
## one = col_character(),
## two = col_integer(),
## three = col_integer()
## )
glimpse(data_utf2)
## Observations: 3
## Variables: 3
## $ one <chr> "привет", "дорогой", "друг"
## $ two <int> 5, 5, 5
## $ three <int> 6, 7, 9
Есть много форматов данных. Самым простым и потому универсальным является формат csv
, comma separated values. Этот формат понимают все программы, работающие с данными.
Экспортируем набор данных про бриллианты в csv
:
export(diamonds, 'diamonds.csv')
Теперь эти данные можно прочитать в большинстве программ! Ровно таким же образом можно экспортировать и в другие форматы: - xlsx
для MS Excel - dta
для stata - sav
для spss
Экспортируйте набор данных diamonds
в эксельчик.
export(df, 'diamonds.xlsx')
Не забудьте, что имя файла должно быть в кавычках. Двойных или одинарных - не важно.
filter
:?filter
skimr
:help(package = 'skimr')
Можно посмотреть, какие виньетки содержит пакет,
vignette(package = 'skimr')
А дальше, узнав название виньеток, прочитать любую из них, например,
vignette('Using_skimr')
Если хочется посмотреть, какие пакеты используют люди моей специальности, то можно зайти на cran task view
Если хочется задать вопрос по статистике или поискать похожий, то поможет форум stats.se
А здесь мы приготовили подборку русскоязычных ресурсов по R
Открытые и бесплатные программы для работы с данными, в которых можно кликать мышкой!
Ура :)