DAY7+ 学习笔记 by 康康

《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
  
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
  
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
        
 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
       
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 康康)