| X23 | X185 | X85.7 | Male |
|---|---|---|---|
| <int> | <chr> | <dbl> | <chr> |
| 41 | 175 | 68.3 | M |
| 11 | 142* | 55.4 | Female |
| 12 | NA | 48.2 | Man |
| 54 | 171 | NA | Looks like a man |
| 32 | 168 | 78.0 | F |
21 Робота з неіменованими та “поганоіменованими” даними
author: Юрій Клебан
21.1 Іменування даних
Першим прикладом проблем у даних можна розгянути читання неіменованих даних, тобто стопці таблиці не мають заголовків у файлі.
Створимо такий файл у блокноті і зчитаємо його:
Зверніть увагу, що у якості стовпців взято перший рядок даних у додано X на початку. Зчитаємо дані із параметром, що вказує на відсутність заголовків:
| V1 | V2 | V3 | V4 |
|---|---|---|---|
| <int> | <chr> | <dbl> | <chr> |
| 23 | 185 | 85.7 | Male |
| 41 | 175 | 68.3 | M |
| 11 | 142* | 55.4 | Female |
| 12 | NA | 48.2 | Man |
| 54 | 171 | NA | Looks like a man |
| 32 | 168 | 78.0 | F |
Проблема іменування не вирішена, дані ми уже не втратили. Передамо одночасно з читанням інформацію про назви стовпців:
data <- read.csv("data/untitled.csv",
header = FALSE,
col.names = c("Age","Height", "Weight", "Gender"))
data| Age | Height | Weight | Gender |
|---|---|---|---|
| <int> | <chr> | <dbl> | <chr> |
| 23 | 185 | 85.7 | Male |
| 41 | 175 | 68.3 | M |
| 11 | 142* | 55.4 | Female |
| 12 | NA | 48.2 | Man |
| 54 | 171 | NA | Looks like a man |
| 32 | 168 | 78.0 | F |
Ще одним варіантом задання назв стовпців є використання функції colnames() як для усіх різом, так і для окремого:
| age | height | width | gender |
|---|---|---|---|
| <int> | <chr> | <dbl> | <chr> |
| 23 | 185 | 85.7 | Male |
| 41 | 175 | 68.3 | M |
| 11 | 142* | 55.4 | Female |
| 12 | NA | 48.2 | Man |
| 54 | 171 | NA | Looks like a man |
| 32 | 168 | 78.0 | F |
| age | HEIGHT | width | gender |
|---|---|---|---|
| <int> | <chr> | <dbl> | <chr> |
| 23 | 185 | 85.7 | Male |
| 41 | 175 | 68.3 | M |
| 11 | 142* | 55.4 | Female |
| 12 | NA | 48.2 | Man |
| 54 | 171 | NA | Looks like a man |
| 32 | 168 | 78.0 | F |
Також змінювати назви стовпців можна за допомогою функції rename() з пакету dplyr:
| AGE | HEIGHT | width | gender |
|---|---|---|---|
| <int> | <chr> | <dbl> | <chr> |
| 23 | 185 | 85.7 | Male |
| 41 | 175 | 68.3 | M |
| 11 | 142* | 55.4 | Female |
| 12 | NA | 48.2 | Man |
| 54 | 171 | NA | Looks like a man |
| 32 | 168 | 78.0 | F |
21.2 Заміна назв стовпців data.frame
Зчитаємо файл, що містить інформацію про осіб, але уже має іменовані стовпці:
| Person.Age | Person__Height | person.Weight | Person.Gender | empty |
|---|---|---|---|---|
| <int> | <chr> | <dbl> | <chr> | <lgl> |
| 23 | 185 | NA | Male | NA |
| 41 | 175 | 68.3 | M | NA |
| 11 | 142* | 55.4 | Female | NA |
| 12 | NA | 48.2 | Man | NA |
| 54 | 191 | NA | female | NA |
| 32 | 168 | 78.0 | F | NA |
| 22 | NA | 54.0 | male. | NA |
| 21 | 165 | NA | m | NA |
| 14 | NA | 90.2 | Man | NA |
| 51 | 250 | NA | female | NA |
| 41 | 20 | 81.0 | F | NA |
| 66 | NA | 59.0 | male. | NA |
| 71 | 171 | NA | m | NA |
Швидко змінити назви стовпців та привести їх до однакового стилю можна за домогою бібліотеки janitor:
- 'person_age'
- 'person_height'
- 'person_weight'
- 'person_gender'
- 'empty'
21.3 Набори даних
- https://github.com/kleban/r-book-published/tree/main/datasets/untitled.csv
- https://github.com/kleban/r-book-published/tree/main/datasets/badtitled.csv
- https://github.com/kleban/r-book-published/tree/main/datasets/cleaned_titled.csv
- https://github.com/kleban/r-book-published/tree/main/datasets/cleaned_titled2.csv
- https://github.com/kleban/r-book-published/tree/main/datasets/river_eco.csv