R_for_Data_Science_Workflow&tran

2020-04-03  本文已影响0人  城管大队哈队长

这是英文版的4、5章节

4 Workflow: basics

5.1 Introduction

但有时候得记得ungroup

Is ungroup() recommended after every group_by()?

5.2 Filter rows with filter()

这是因为计算机是用有限精度来处理这些问题的。碰到这些问题的时候,考虑使用near函数

near(sqrt(2) ^ 2, 2)
#> [1] TRUE
near(1 / 49 * 49, 1)
#> [1] TRUE

# 任何数的0次方都是1
# 这个特性对于scale的时候很有用,因为有时候你对于所有数都是均等进行scale的话,会由于方差是0(因为方差是分母)而无法返回值,这时候你就可以 x - mean(x) / (sd(x) ^ 0) 来解决这个问题了
> NA ^ 0
  [1] 1

# 因为
# anything and FALSE is always FALSE.
# anything or TRUE is always TRUE
> NA | TRUE
[1] TRUE
> FALSE & NA
[1] FALSE

# 而这里就不是了,我们不确定NA是什么,而结果又是会根据NA值的不同而变化的,所以返回值就是NA了
> NA | FALSE
[1] NA
> NA & TRUE
[1] NA


# 关于这个问题,我更喜欢Quaro的回答
# https://www.quora.com/In-R-why-is-NA*0-not-equal-to-0

# 即NA可以代表任何值,可以代表0也可以代表NaN。
# 而 x * 0 == 0 这一特性只在值是有限的时候,
# 而在无限的时候结果则是NaN,即无意义数
# 所以这里等于用NA代表了两种结果
> NA * 0
[1] NA

> Inf * 0
[1] NaN

NaN 和 Null 要区分, NaN代表无意义,即 not a number。而 Null 代表的是一种特殊的对象,表示函数没有被赋予任何内容。

R中NA,NaN,Inf什么意思

R语言初级教程(12): NA、Inf、NaN、NULL 特殊值


5.3 Arrange rows with arrange()



5.4 Select columns with select()



5.5 Add new variables with mutate()



5.6 Grouped summaries with summarise()

在循序渐进地进行摘要分析时,需要小心:使用求和与计数操作是没问题的,但如果想要使用加权平均和方差的话,就要仔细考虑一下,在基于秩的统计数据(如中位数)上是无法进行这些操作的。换句话说,对分组求和的结果再求和就是对整体求和,但分组中位数的中位数可不是整体的中位数。(这话来自中文版)

我觉得意思就是

# 整体求和 和 把整体分割成组,然后分组求和的结果是一样的
# 这个你可以通过自己列公式看出来
> sum(1:8)
[1] 36
> sum(sum(1:4),sum(5:6),sum(7:8))
[1] 36

# 但整体求中位数 和 把整体分割成组,然后分组求中位数,再求中位数的结果是不一样的
> median(1:8)
[1] 4.5
> median(median(1:4),median(5:6),median(7:8))
[1] 2.5

# 均值同理
> mean(1:8)
[1] 4.5
> mean(mean(1:4),mean(5:6),mean(7:8))
[1] 2.5

> not_cancelled %>%
+   count(tailnum, wt = distance) %>% 
+   head(n = 3)
# A tibble: 3 x 2
  tailnum      n
  <chr>    <dbl>
1 D942DN    3418
2 N0EGMQ  239143
3 N10156  109664

> not_cancelled %>%
+   group_by(tailnum) %>% 
+   summarise(n = sum(distance)) %>% 
+   head(n = 3)
# A tibble: 3 x 2
  tailnum      n
  <chr>    <dbl>
1 D942DN    3418
2 N0EGMQ  239143
3 N10156  109664

# 同样举个例子
> not_cancelled %>%
+   filter(., tailnum == "D942DN") %>% 
+   pull(distance) %>% 
+   sum()
[1] 3418

# Like the previous example, we can also use the combination group_by() and tally(). 
# Any arguments to tally() are summed.
> not_cancelled %>%
+   group_by(tailnum) %>%
+   tally(distance) %>% 
+   head(n = 3)
# A tibble: 3 x 2
  tailnum      n
  <chr>    <dbl>
1 D942DN    3418
2 N0EGMQ  239143
3 N10156  109664

5.7 Grouped mutates (and filters)

上一篇下一篇

猜你喜欢

热点阅读