Манипуляции с данными с помощью 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
Надеюсь, с этими навыками вы сможете самостоятельно манипулировать данными!