Манипуляции с данными с помощью dpyr

Итак, вы получили свои данные, но что вы можете с ними сделать? Для меня самым быстрым и простым способом манипулирования данными с помощью R было бы использование dpylr. Я познакомлю вас с пятью распространенными глаголами dpyrr, чтобы вы начали.

Получение ваших данных в R

В этом упражнении мы будем использовать встроенный набор данных airquality. Однако не стесняйтесь использовать read.csv или другие методы чтения для передачи данных в R.

> library(dplyr)
> df <- airquality
> head(df)
Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6

Мутировать

Mutate позволяет создать новый столбец. Общий синтаксис dataframe %>% mutate(newcolname=calculations).

> df.m1 <- df %>% mutate(city="Singapore")
> head(df.m1)
Ozone Solar.R Wind Temp Month Day      city
1    41     190  7.4   67     5   1 Singapore
2    36     118  8.0   72     5   2 Singapore
3    12     149 12.6   74     5   3 Singapore
4    18     313 11.5   62     5   4 Singapore
5    NA      NA 14.3   56     5   5 Singapore
6    28      NA 14.9   66     5   6 Singapore

Mutate часто используется для выполнения вычислений на основе других столбцов. Здесь мы вычисляем искусственное temp_index, где Wind умножается на Temp.

> df.m2 <- df %>% mutate(temp_index = Wind*Temp)
> head(df.m2)
  Ozone Solar.R Wind Temp Month Day temp_index
1    41     190  7.4   67     5   1      495.8
2    36     118  8.0   72     5   2      576.0
3    12     149 12.6   74     5   3      932.4
4    18     313 11.5   62     5   4      713.0
5    NA      NA 14.3   56     5   5      800.8
6    28      NA 14.9   66     5   6      983.4

Выбирать

Выбрать позволяет выбрать нужные столбцы.

> df.s1 <- df %>% select(Ozone,Solar.R,Wind)
> head(df.s1)
  Ozone Solar.R Wind
1    41     190  7.4
2    36     118  8.0
3    12     149 12.6
4    18     313 11.5
5    NA      NA 14.3
6    28      NA 14.9

Или вы можете указать, какие столбцы удалить, используя -.

> df.s2 <- df %>% select(-Ozone)
> head(df.s2)
  Solar.R Wind Temp Month Day
1     190  7.4   67     5   1
2     118  8.0   72     5   2
3     149 12.6   74     5   3
4     313 11.5   62     5   4
5      NA 14.3   56     5   5
6      NA 14.9   66     5   6

Договариваться

Упорядочить позволяет расположить строки в порядке возрастания или убывания.

> df.asc <- df %>% arrange(Temp)
> head(df.asc)
  Ozone Solar.R Wind Temp Month Day
1    NA      NA 14.3   56     5   5
2     6      78 18.4   57     5  18
3    NA      66 16.6   57     5  25
4    NA      NA  8.0   57     5  27
5    18      65 13.2   58     5  15
6    NA     266 14.9   58     5  26
> df.dsc <- df %>% arrange(desc(Temp))
> head(df.dsc)
  Ozone Solar.R Wind Temp Month Day
1    76     203  9.7   97     8  28
2    84     237  6.3   96     8  30
3   118     225  2.3   94     8  29
4    85     188  6.3   94     8  31
5    NA     259 10.9   93     6  11
6    73     183  2.8   93     9   3

Фильтр

Фильтр сохраняет строки на основе ваших критериев.

> df.f1 <- df %>% filter(Solar.R>150)
> head(df.f1)
  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    18     313 11.5   62     5   4
3    23     299  8.6   65     5   7
4    NA     194  8.6   69     5  10
5    16     256  9.7   69     5  12
6    11     290  9.2   66     5  13

Или, если вам нужны данные только за определенный месяц.

> df.f2 <- df %>% filter(Month==7)
> head(df.f2)
  Ozone Solar.R Wind Temp Month Day
1   135     269  4.1   84     7   1
2    49     248  9.2   85     7   2
3    32     236  9.2   81     7   3
4    NA     101 10.9   84     7   4
5    64     175  4.6   83     7   5
6    40     314 10.9   83     7   6

Фильтрация значений NA немного сложнее.

> df.f3 <- df %>% filter(is.na(Solar.R))
> head(df.f3)
  Ozone Solar.R Wind Temp Month Day
1    NA      NA 14.3   56     5   5
2    28      NA 14.9   66     5   6
3     7      NA  6.9   74     5  11
4    NA      NA  8.0   57     5  27
5    78      NA  6.9   86     8   4
6    35      NA  7.4   85     8   5

Подведем итог

С суммированием вы можете комбинировать с другими функциями сводной статистики, такими как mean, median и т. д.

> df.sum <- df %>% summarise(mean_temp = mean(Temp), md_temp = median(Temp))
> df.sum
  mean_temp md_temp
1  77.88235      79

summature особенно эффективен при использовании вместе с group_by, так что вы можете вычислить сводную статистику различных групп.

> df.sum <-  df %>% 
     group_by(Month) %>% 
     summarise(mean_temp = mean(Temp), 
               md_temp = median(Temp))
> df.sum
  Month mean_temp md_temp
1     5      65.5      66
2     6      79.1      78
3     7      83.9      84
4     8      84.0      82
5     9      76.9      76

Надеюсь, с этими навыками вы сможете самостоятельно манипулировать данными!