美文网首页
DAY7+ 学习笔记 by 康康

DAY7+ 学习笔记 by 康康

作者: ReneeeeKKKK | 来源:发表于2020-12-20 14:03 被阅读0次

    《R与tidyverse——数据分析入门》学习笔记

    R与tidyverse——数据分析入门

    3. dataframe 和 tibble

    1. R中的多变量数据的标准保存形式是dataframe;tibble是dataframe的进化版。
    2. 一个正确的dataframe


      书中截图
    3. 创建tibble
      3.1 新建一个tibble
      tbble() 【注意】tibble是按列写入的
      举例:
    my_tibble_1 <- tibble(
                    nums = c(4, 5, 6),
                    chars = c("hej", "你好", "こんにちは"),
                    cplxnums = c("4+8i", "3+5i", "3+4i")
                    )
    

    tribble()函数亦可用来创建新tibble. 与tibble()的区别是,tibble()是逐列写入数据,tribble()是逐行写入数据

    3.2 把dataframe转变为tibble
    a1 <- as_tibble(a) #a是一个已经建好的dataframe
    3.3 从外部数据创建tibble
    安装readr包,使用read_csv等命令可以比base包中的read.csv更快导入数据,而且可以直接生成tibble格式

    readr的命令
    1. 在dplyr中进行数据变换
      4.1 提取单列
      $(仅用于变量名称)与[[]](变量名称或索引)
      4.2 提取多列
      select()可以抓取多列,并返回一个tibble
      屏幕快照 2020-12-18 下午3.25.09.png
    select(test1,Sepal.Length,Species)
    #可以额外地按照你指定的顺序重排
    select(test1, Species, ends_with("Length"))
    #ends_with函数用于找名称中包含Length的列
    

    4.3 提取observations(即 “行”)
    filter() 可以过滤出某个或多个变量满足某种条件的observations.

    #假设我们只想看种名为 virginica且花瓣长度在4和5之间的鸢尾花:
    iris_2 <- filter(iris, Species == "virginica", Petal.Length >= 4 & Petal.Length < 5)
    

    4.4 通过索引行数提取行
    slice()

    iris_3 <- slice(iris, 21:24) # 抓取`iris`的第21行至24行
    

    4.5 排序
    arrange()默认从小到大排序
    若要从大到小,可以

    arrange(iris, -Sepal.Length)
    #或
    arrange(iris, desc(Sepal.Length))
    

    根据Petal.Width从小到大的顺序排列,若有并列,再根据Petal.Length从大到小的顺序排列
    arrange(iris, Petal.Width, -Petal.Length)
    4.6 用mutate新增变量或重新赋值变量
    mutate()的第一个参数是dataframe/tibble的名称,接下来的参数都是变量名和它们所对应的值;可以直接在计算它们的值的表达式中使用tibble中原有的变量名,如height, weight

    women <- as_tibble(datasets::women)#使用datasets中的数据women举例
    women
    women1 <- mutate(women, 
                     height_in_m = height/39.37,
                     weight_in_kg = weight/2.204) #在新tibble中新增变量,将height和weight改成以m和kg为单位
    women1
    women2 <- mutate(women, height = height/39.37, weight = weight/2.204)#在新tibble中对height和weight进行重新赋值
    women2
    women3<-mutate(women2,BMI=weight/height^2)
    women3
    

    4.7 管道操作
    %>%的名称是“pipe operator”,快捷键默认是command+shift+M

    其本质上就是把它左边的运算结果作为右边函数的第一个参数,然后再根据使用者提供的其它参数计算右边的函数。第一行是操作的对象 (aids),下面每一行是一次操作,与逻辑顺序一致,而且不需要每进行一次操作就赋值/重新引用新的数据,每个函数的第一个参数(dataframe/tibble名称)被省略了。

    aids_4<-select(mutate(filter(aids,status=="D"),span=death-diag),span)
    #一环套一环,读取不易,且需要从里往外读
    head(aids_4) 
    # A tibble: 6 x 1
       span
      <int>
    1   176
    2    67
    3   432
    4    77
    5   275
    6   373
    aids_5<-aids %>% filter(status=="D") %>% mutate(span=death-diag) %>% select(span)  
    #使用管道操作后可以从前往后读取,逻辑顺畅,且不易出错
    head(aids_5)
    # A tibble: 6 x 1
       span
      <int>
    1   176
    2    67
    3   432
    4    77
    5   275
    6   373
    identical(aids_4,aids_5)
    [1] TRUE
    
    

    4.8 group_by与summarise
    这是两个经常被放在一起使用的,实用且强大的函数。
    group_by()用于分组
    summarise()可以汇总计算平均值、标准差、标准误等等

    > wb_group<-group_by(wb,wool,tension)
    > wb_group
    # A tibble: 54 x 3
    # Groups:   wool, tension [6]
       breaks wool  tension
        <dbl> <fct> <fct>  
     1     26 A     L      
     2     30 A     L      
     3     54 A     L      
     4     25 A     L      
     5     70 A     L      
     6     52 A     L      
     7     51 A     L      
     8     26 A     L      
     9     67 A     L      
    10     18 A     M      
    # … with 44 more rows
    > wb_sum <- summarise(wb_group,n = n(),MEAN= mean(breaks))
    `summarise()` regrouping output by 'wool' (override with `.groups` argument)
    > wb_sum
    # A tibble: 6 x 4
    # Groups:   wool [2]
      wool  tension     n  MEAN
      <fct> <fct>   <int> <dbl>
    1 A     L           9  44.6
    2 A     M           9  24  
    3 A     H           9  24.6
    4 B     L           9  28.2
    5 B     M           9  28.8
    6 B     H           9  18.8
    

    相关文章

      网友评论

          本文标题:DAY7+ 学习笔记 by 康康

          本文链接:https://www.haomeiwen.com/subject/xunxnktx.html