R语言基于dplyr实现数据快捷操作

2020-12-14 11:05:07 浏览数 (1)

R语言在处理大数据方面一直是被人诟病的地方,那么有人就为R语言打造了一个dplyr包可以实现高效的数据预处理,减少内存的消耗,提升处理效率。今天就给大家详细看下这个包的具体功能。首先看下包的安装:
代码语言:javascript复制
install.packages("dplyr")

接下来我们看下具体的功能:

1. as_tibble 将大的数据转化为友好展示的格式。实例:

代码语言:javascript复制
library(dplyr)
mtcars <- as_tibble(mtcars)

2. arrange 对数据集进行整体基于单列或者多列进行排序。实例

代码语言:javascript复制
##升序
mtcars %>% arrange(cyl, disp)
代码语言:javascript复制
###降序
mtcars %>% arrange(desc(cyl),desc(disp))

3. distinct 去除重复的行。实例:

代码语言:javascript复制
df <- tibble(
  x =sample(10, 100, rep = TRUE),
  y =sample(10, 100, rep = TRUE)
)
df %>% distinct(x, .keep_all = TRUE) #whole data frame

4. filter 匹配对应行的数据。并生成结果。等同于subset函数。实例:

代码语言:javascript复制
starwars %>% filter(hair_color =="none" & eye_color == "black")

5. mutate 为数据集增加新的变量。实例:

代码语言:javascript复制
df %>% mutate(z = x   y, z2 = z ^ 2)

6. pull 输出单个变量。

7. relocate改变列之间排序。实例:

8. rename重新命名某一个变量。实例:

代码语言:javascript复制
iris <- as_tibble(iris)
iris %>% rename(sepal_length =Sepal.Length, sepal_width = 2)

9. rename_with 对列名进行操作。实例:

代码语言:javascript复制
iris %>% rename_with(toupper)

10. select 选择要输出的变量。可以直接填入变量名,也可以直接用列号,或者更深一层添加功能函数:start_with(以什么开头的变量),where(什么要求的变量)实例:

代码语言:javascript复制
iris %>%select(starts_with("Petal"))##以Petal开头的变量
iris %>% select(where(is.factor)) ##属性为因子的变量。

11. summarise 汇总变量的属性,并进行统计输出。实例:

代码语言:javascript复制
mtcars %>%
 group_by(cyl) %>%
 summarise(mean = mean(disp), n = n())

12. group_by基于单个或者多个变量进行分组。

13. n() 指的是统计行数

14. slice 选择输出的行。实例:

15. nest_by隐掉某个变量后面的数据,赋值给data,只展示大小。实例:

代码语言:javascript复制
mtcars %>% nest_by(cyl)
代码语言:javascript复制
##高级的模型构建
by_cyl <- mtcars %>% nest_by(cyl)
mods <- by_cyl %>% mutate(mod =list(lm(mpg ~ wt, data = data)))
mods <- mods %>% mutate(pred =list(predict(mod, data)))
mods

16. across 针对某一列进行操作,两个参数:第一个为列名,第二个为操作函数。实例:

代码语言:javascript复制
starwars %>%
 summarise(across(where(is.character), ~ length(unique(.x))))
代码语言:javascript复制
###高级复杂应用:
starwars %>%
 group_by(species) %>%
 filter(n() > 1) %>%
 summarise(across(c(sex, gender, homeworld), ~ length(unique(.x))))

17. 多个表之间的操作:

最后我们看下更高级的应用实例:

代码语言:javascript复制
###自定义函数在通道中的应用
var_summary <- function(data, var) {
 data %>%
   summarise(n = n(), min = min({{ var }}), max = max({{ var }}))
}
mtcars %>%
 group_by(cyl) %>%
 var_summary(mpg)
代码语言:javascript复制
###shiny交互的操作
library(shiny)
ui <- fluidPage(
 selectInput("var", "Variable", choices = names(mtcars)),
 tableOutput("output")
)
server <- function(input, output,session) {
 data <- reactive(filter(mtcars, .data[[input$var]] > 0))
 output$output <- renderTable(head(data()))
}
shinyApp(ui, server)

0 人点赞