日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

R語言列篩選的方法select實例詳解_R語言

作者:育種數據分析之放飛自我 ? 更新時間: 2022-09-07 編程語言

前言

我們知道,R語言學習,80%的時間都是在清洗數據,而選擇合適的數據進行分析和處理也至關重要,如何選擇合適的列進行分析,你知道幾種方法?

如何優雅高效的選擇合適的列,讓我們一起來看一下吧。

1. 數據描述

數據來源是我編寫的R包learnasreml中的fm數據集。

r$> library(learnasreml)

r$> data(fm)

r$> head(fm)

我們的目的:

提取fm的TreeID,Rep,dj,dm,h3,并重命名為:ID, F1, y1 , y2, y3

2. 使用R語言默認的方法:列選擇

這一種,當然是簡單粗暴的方法,想要哪一列,就把相關的列號提取出來,形成一個向量,進行操作即可。比如

r$> d1 = fm[,c(1,3,6,7,11)]

r$> head(d1)
  TreeID Rep    dj    dm  h3
1  80001   1 0.334 0.405 239
2  80002   1 0.348 0.393 242
3  80004   1 0.354 0.429 180
4  80005   1 0.335 0.408 301
5  80008   1 0.322 0.372 271
6  80026   1 0.359 0.450 258

r$> names(d1) = c("ID","F1","y1","y2","y3")

r$> head(d1)

結果:

缺點:

這種方法,需要找到性狀所在的列號,然后還要重命名,比較麻煩。

而且,后面如果想要根據列的特征進行提取時(比如以h開頭的列,比如屬性為數字或者因子的列等等),就不能實現了。

這就要用到tidyverse的函數了,selectrename,都是一等一的良將。

3. tidyverse的rename函數

代碼:

a2 = fm %>% rename(ID=TreeID, F1 = Rep, y1 = dj, y2 = dm, y3 = h3)

這里,rename只是單獨的修改名稱,并沒有提取出來。

還要使用select進一步的提取:

4. tidyverse的select函數

如果使用select函數,一行代碼就可以搞定:

a1 = fm %>% select(ID=TreeID, F1 = Rep, y1 = dj, y2 = dm, y3 = h3)

5. select函數注意事項

常見的坑:

注意,MASS包中也有select函數,而且優先級更高,如果你載入了MASS包,select就不能使用了。

哪怕你再次載入tidyverse包,也不行:

載入dplyr包,也不行:

MASS就是這么豪橫。

像這種情況,解決辦法有兩種:

5.1 絕對引用函數

即使用select時,要用dplyr::select

a3 = a2 %>% dplyr::select(ID,F1,y1,y2,y3)

這樣也比較麻煩。

5.2 放到環境變量中

推薦的方法:

r$> select = dplyr::select

r$> a3 = a2 %>% select(ID,F1,y1,y2,y3)

推薦在載入包時,將下面代碼放在開頭,就可以肆無忌憚的應用select了,畢竟,環境變量的優先級是第一位的。

library(tidyverse)
select = dplyr::select

6. 提取h開頭的列

這里,用starts_with,會匹配開頭為h的列。

其它還有contains,匹配包含的字符,還有end_with,匹配結尾的字符。

應有盡有,無所不有。

re1 = fm %>% select(starts_with("h"))

7. 提取因子和數字的列

匹配數字的列:

re2 = fm %>% select_if(is.numeric)

匹配為因子的列:

re3 = fm %>% select_if(is.factor)

總結

原文鏈接:https://blog.csdn.net/yijiaobani/article/details/122561804

欄目分類
最近更新