R语言R炒面机器学习

9-使用dplyr进行数据操作

2019-12-03  本文已影响0人  wonphen

一、数据说明

二、dplyr函数

三、读取数据

library(pacman)
p_load(dplyr, openxlsx)
df <- read.xlsx("C:/Users/Admin/Documents/R/data_set/选拔赛人员名单.xlsx", 
                sheet = 1, #读取第一个工作簿
                startRow = 2, #第一行为标题,从第二行开始读取
                colNames = T, #是否有列名
                rowNames = F,#是否有行名
                skipEmptyRows = T,#是否跳过空行
                skipEmptyCols = T)#是否跳过空列
df <- tbl_df(df) #让输出适应宽度,更美观
names(df)
names(df)

四、对行的操作:sample、distinct、filter

1.随机选择N行

df1 <- sample_n(df, 3)

2.随机选择总行的N%

#随机返回10%的行
df2 <- sample_frac(df, 0.1)

3.基于所有变量删除重复行

df3 <- distinct(df)

4.基于单个变量删除重复行

#keep_all保留输出数据框中的所有其他变量
df4 <- distinct(df, Name, .keep_all = T)

5.基于多个变量删除重复行

df5 <- distinct(df, Name, ID_Number, .keep_all = T)

6.选择行

df12 <- filter(df, Minute == "52")

7.多重选择标准

df13 <- filter(df6, Minute %in% c(50:60))

8.选择标准中的"AND"条件

df14 <- filter(df6, Minute %in% c(50:60) & Class_2 == "MBDA/MEM")

9.选择标准中的"OR"条件

df15 <- filter(df6, Minute %in% c(50:60) | Class_2 == "MBDA/MEM")

10.非条件

df16 <- filter(df15, !Minute %in% c(50:60))

11.搜索模式匹配

df17 <- filter(df, grepl("女", gender))

五、对列的操作:select、rename

12.选择列

df6 <- select(df, Name, gender, Class_2:Minute)

13.删除变量(列)

df7 <- select(df6, -Phone_number)

14.选择或删除以P开头的变量

df8 <- select(df6, -starts_with('P'))

以下函数均可根据名称选择变量:

函数 作用
starts_with("abc") 匹配以abc开头的名字
ends_with("xyz") 匹配以xyz结尾的名字
contains("ijk") 匹配包含ijk的名称
matches("(.)\1") 选择匹配正则表达式的那些变量
num_range("x",1:3) x01,x02,x03这样的数值序列
one_of() 字符向量之一
everything() 所有变量

15.选择变量名中包含“M”的变量

df9 <- select(df, contains("M"))

16.重新排列变量

#Minute放在最前面
df10 <- select(df6, Minute, everything())

17.变量重命名

#将gender重命名为Gender
df11 <- rename(df6, Gender = gender)

六、总结:summarize

18.总结选定的变量

summ18 <- summarise(df13, Min_mean = mean(Minute), Min_med = median(Minute))

19.总结多个变量

summ19 <- summarise_at(df13, vars(Minute), funs(n(), mean, median))

20.用自定义的函数进行总结

summ20 <- summarise_at(df, vars(Minute),
                 funs(n(), missing = sum(is.na(.)),
                 mean(., na.rm = T),
                 median(., na.rm = T)))

21.总结所有的数字变量

#允许有条件的总结。先得处理缺失值
summ21 <- summarise_if(df, is.numeric, funs(n(), mean, median))
#或者
num_data <- df[sapply(df, is.numeric)]
summ21_2 <- summarise_all(num_data, funs(n(), mean, median)) 

22.总结因子变量

df22 <- df11 %>% mutate(Gender = as.factor(Gender))
summ22 <- summarise_all(df22["Gender"], funs(nlevels(.), nmiss = sum(is.na(.))))

23.按分类变量汇总数据

summ24 <- summarise_at(group_by(df, Class_2), vars(Minute), funs(n(), mean(., na.rm = T)))
#或者
summ24_2 <- df %>% group_by(Class_2) %>% summarise_at(vars(Minute), funs(n(), mean(., na.rm = T)))

24.过滤分类变量中的数据

df25 <- df %>% filter(Class_2 %in% c("MBDA/MEM", "IMBA")) %>% group_by(ID) %>% do(head(., 3))

25.通过分类变量选择第一最大值

df26 <- df %>%
  select(Name, Class, Minute) %>%
  filter(Class %in% c("2019级MBDA/MEM", "2019级MBA12")) %>%
  group_by(Class) %>%
  do(arrange(., desc(Minute))) %>%
  #选择第一行
  slice(1)

#或者
df26_2 <- df %>%
  select(Name, Class, Minute) %>%
  filter(Class %in% c("2019级MBDA/MEM", "2019级MBA12")) %>%
  group_by(Class) %>%
  filter(min_rank(desc(Minute)) == 1)

七、总结、分组和排序:summarize、group_by、arrange

27.按多个变量排序数据

df23 <- arrange(df22, Minute, Class_2)
#对其中一个降序,其他升序
df23_2 <- arrange(df22, desc(Minute), Name)
df27 <- df %>%
  group_by(Class_2) %>%
  summarise(mean_class = mean(Minute, na.rm = T)) %>%
  arrange(desc(mean_class))

八、创建新变量:mutate

28.创建一个hours变量

df28 <- mutate(df, hours = Minute/60)

29.将所有变量改为hours乘以60,并用后缀_new命名

df29 <- mutate_all(df28, funs("new" = hours * 60))

30.计算变量的排名

df30 <- mutate_at(na.omit(df), vars(Minute), funs(Rank = min_rank(.)))
上一篇下一篇

猜你喜欢

热点阅读