Tidyverse Tips||reorder重排列

 tidyverse_logo()
* __  _    __   .    o           *  . 
 / /_(_)__/ /_ ___  _____ _______ ___ 
/ __/ / _  / // / |/ / -_) __(_-</ -_)
\__/_/\_,_/\_, /|___/\__/_/ /___/\__/ 
     *  . /___/      o      .       * 

我發(fā)現(xiàn)以下命令在任何數(shù)據(jù)科學項目的EDA部分中都非常有用媒熊。我們將使用tidyverse包奇适,實際上只需要dplyr和ggplot2和用iris數(shù)據(jù)集,來演示它們芦鳍。

select_if | rename_if

select_if函數(shù)屬于dply嚷往,在需要根據(jù)某些條件選擇某些列時非常有用。我們還可以添加一個應用于列名的函數(shù)柠衅。

library(tidyverse)

iris%>%select_if(is.numeric,  list(~ paste0("numeric_", .)))%>%head()

  numeric_Sepal.Length numeric_Sepal.Width numeric_Petal.Length numeric_Petal.Width
1                  5.1                 3.5                  1.4                 0.2
2                  4.9                 3.0                  1.4                 0.2
3                  4.7                 3.2                  1.3                 0.2
4                  4.6                 3.1                  1.5                 0.2
5                  5.0                 3.6                  1.4                 0.2
6                  5.4                 3.9                  1.7                 0.4

注意皮仁,我們也可以以同樣的方式使用rename_if。需要注意的是rename_if()菲宴、rename_at()和rename_all()已經(jīng)被rename_with()取代了贷祈。匹配的select語句已被select() + rename_with()的組合取代。

這些函數(shù)被替換喝峦,因為mutate_if()和friends被across()取代势誊。select_if()和rename_if()已經(jīng)使用了整齊選擇,所以它們不能被across()替換谣蠢,相反键科,我們需要一個新函數(shù)闻丑。

everything

在許多數(shù)據(jù)科學項目中,我們希望一個特定的列(通常是因變量y)出現(xiàn)在數(shù)據(jù)集中的第一個或最后一個勋颖。我們可以使用dplyr包中的everything()來實現(xiàn)這一點嗦嗡。

iris%>%select(Species, everything()) %>%head()
  Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1  setosa          5.1         3.5          1.4         0.2
2  setosa          4.9         3.0          1.4         0.2
3  setosa          4.7         3.2          1.3         0.2
4  setosa          4.6         3.1          1.5         0.2
5  setosa          5.0         3.6          1.4         0.2
6  setosa          5.4         3.9          1.7         0.4
mydataset <- iris%>%select(Species, everything())
mydataset%>%select(-Species, everything())%>%head() 

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
relocate

relocate()是dplyr 1.0.0中新增的一個功能。您可以指定將.before或.after的列位置饭玲。

iris%>%relocate(Petal.Width, .after=Sepal.Width)%>%head()
  Sepal.Length Sepal.Width Petal.Width Petal.Length Species
1          5.1         3.5         0.2          1.4  setosa
2          4.9         3.0         0.2          1.4  setosa
3          4.7         3.2         0.2          1.3  setosa
4          4.6         3.1         0.2          1.5  setosa
5          5.0         3.6         0.2          1.4  setosa
6          5.4         3.9         0.4          1.7  setosa
iris%>%relocate(Petal.Width, .after=last_col())%>%head()
  Sepal.Length Sepal.Width Petal.Length Species Petal.Width
1          5.1         3.5          1.4  setosa         0.2
2          4.9         3.0          1.4  setosa         0.2
3          4.7         3.2          1.3  setosa         0.2
4          4.6         3.1          1.5  setosa         0.2
5          5.0         3.6          1.4  setosa         0.2
6          5.4         3.9          1.7  setosa         0.4
pull

當我們處理數(shù)據(jù)幀時侥祭,我們選擇單個列,有時我們輸出為as.vector茄厘。我們可以使用作為dplyr一部分的pull()來實現(xiàn)這一點

setosa_sepal_length<-iris%>%filter(Species=='setosa')%>%select(Sepal.Length)%>%pull()
setosa_sepal_length

 [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8
[32] 5.4 5.2 5.5 4.9 5.0 5.5 4.9 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6 5.3 5.0
virginica_sepal_length<-iris%>%filter(Species=='virginica')%>%select(Sepal.Length)%>%pull()

t.test(setosa_sepal_length,virginica_sepal_length)

    Welch Two Sample t-test

data:  setosa_sepal_length and virginica_sepal_length
t = -15.386, df = 76.516, p-value < 2.2e-16
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -1.78676 -1.37724
sample estimates:
mean of x mean of y 

reorder

當您使用ggplot2時矮冬,有時會感到沮喪,因為您必須根據(jù)某些條件重新排序這些因素次哈。假設我們想要展示萼片的箱形圖胎署。寬度的物種。

iris%>%ggplot(aes(x=Species, y=Sepal.Width))+geom_boxplot() + theme_bw()
iris%>%ggplot(aes(x=reorder(Species,Sepal.Width, FUN = median), y=Sepal.Width))+geom_boxplot()+xlab("Species") + theme_bw()
across

令人驚訝的是窑滞,使across()起作用的關(guān)鍵思想來自于我們在vctrs包上的底層工作琼牧,在那里我們了解到數(shù)據(jù)幀的一列本身就是數(shù)據(jù)幀


mpg %>% head()
# A tibble: 6 x 11
  manufacturer model displ  year   cyl trans      drv     cty   hwy fl    class  
  <chr>        <chr> <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>  
1 audi         a4      1.8  1999     4 auto(l5)   f        18    29 p     compact
2 audi         a4      1.8  1999     4 manual(m5) f        21    29 p     compact
3 audi         a4      2    2008     4 manual(m6) f        20    31 p     compact
4 audi         a4      2    2008     4 auto(av)   f        21    30 p     compact
5 audi         a4      2.8  1999     6 auto(l5)   f        16    26 p     compact
6 audi         a4      2.8  1999     6 manual(m5) f        18    26 p     compact


mpg %>%
    group_by(class) %>%
    summarise(
        across(
            c(cty, hwy),
            .fns = list(
                "mean"     = ~ mean(.x),
                "range lo" = ~ (mean(.x) - 2*sd(.x)),
                "range hi" = ~ (mean(.x) + 2*sd(.x))
            ),
            .names = "{.fn} {.col}"
        ),
        .groups = "drop"
    ) %>%
    rename_with(.fn = str_to_upper)


# A tibble: 7 x 7
  CLASS      `MEAN CTY` `RANGE LO CTY` `RANGE HI CTY` `MEAN HWY` `RANGE LO HWY` `RANGE HI HWY`
  <chr>           <dbl>          <dbl>          <dbl>      <dbl>          <dbl>          <dbl>
1 2seater          15.4          14.3            16.5       24.8           22.2           27.4
2 compact          20.1          13.4            26.9       28.3           20.7           35.9
3 midsize          18.8          14.9            22.6       27.3           23.0           31.6
4 minivan          15.8          12.2            19.5       22.4           18.2           26.5
5 pickup           13             8.91           17.1       16.9           12.3           21.4
6 subcompact       20.4          11.2            29.6       28.1           17.4           38.9
7 suv              13.5           8.66           18.3       18.1           12.2           24.1

https://www.r-bloggers.com/2020/11/tidyverse-tips/
https://www.tidyverse.org/blog/2020/04/dplyr-1-0-0-colwise/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市哀卫,隨后出現(xiàn)的幾起案子巨坊,更是在濱河造成了極大的恐慌,老刑警劉巖此改,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件趾撵,死亡現(xiàn)場離奇詭異,居然都是意外死亡共啃,警方通過查閱死者的電腦和手機占调,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來移剪,“玉大人妈候,你說我怎么就攤上這事」易遥” “怎么了苦银?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赶站。 經(jīng)常有香客問我幔虏,道長,這世上最難降的妖魔是什么贝椿? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任想括,我火速辦了婚禮,結(jié)果婚禮上烙博,老公的妹妹穿的比我還像新娘瑟蜈。我一直安慰自己烟逊,他們只是感情好,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布铺根。 她就那樣靜靜地躺著宪躯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪位迂。 梳的紋絲不亂的頭發(fā)上访雪,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音掂林,去河邊找鬼臣缀。 笑死,一個胖子當著我的面吹牛泻帮,可吹牛的內(nèi)容都是我干的精置。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锣杂,長吁一口氣:“原來是場噩夢啊……” “哼脂倦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蹲堂,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤狼讨,失蹤者是張志新(化名)和其女友劉穎贝淤,沒想到半個月后柒竞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡播聪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年朽基,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片离陶。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡稼虎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出招刨,到底是詐尸還是另有隱情霎俩,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布沉眶,位于F島的核電站打却,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谎倔。R本人自食惡果不足惜柳击,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望片习。 院中可真熱鬧捌肴,春花似錦蹬叭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至试幽,卻和暖如春筝蚕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铺坞。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工起宽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人济榨。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓坯沪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親擒滑。 傳聞我的和親對象是個殘疾皇子腐晾,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容