在R中子集化數據框的5種方法

2021-01-15 史提芬先生

由於微信不允許外部連結,你需要點擊文章尾部左下角的 "閱讀原文",才能訪問文中連結。

通常,我們在使用大型數據集時,只會對其中的一小部分感興趣,用以進行特定分析。 那麼,我們應該如何對所有無關的變量和觀察值進行排序並僅提取我們需要的那部分數據? 其實,在 R 中有幾種被稱為 「subsetting(子集化)」 的方法可以滿足以上的需求,今天我們來聊一下。

在 R 中對數據框(data frame)進行子集化的最基本方法是使用方括號:

example[x, y]

example 是我們想要從中提取子集的數據框;』x』是我們想要提取的子集的行;』y』 是我們想要提取的子集的列。 讓我們從網上提取一些數據,看看它是如何在真實的數據集上實現的。

### import education expenditure data setand assign column nameseducation <- read.csv("https://vincentarelbundock.github.io/Rdatasets/csv/robustbase/education.csv", stringsAsFactors = FALSE)colnames(education) <- c("X","State","Region","Urban.Population","Per.Capita.Income","Minor.Population","Education.Expenditures")head(education, 25)

這是我導入數據並適當命名其列後數據集的第一部分(前 25 行):

現在,讓我們假設回顧一下美國中西部的學校分布,並且我們需要計算 Region 2 地區中每個州每個孩子花費了多少錢。 我們需要三個變量:State,Minor.Population 和 Education.Expenditures。 但是,我們只需要對應於 Region 2 的行的觀察結果。這是在 R 中檢索該數據的基本方法:

ed_exp1 <- education[c(10:21), c(2, 6:7)]

為了創建新的數據框 『ed_exp1』,我們通過提取第 10-21 行和第 2, 6 和 7 列來對 「education(教育)」 數據框進行子集化。非常簡單,對吧?

使用括號對數據框進行子集化的另一種方法是省略行和列引用(即反取)。 看看這段代碼:

ed_exp2 <- education[-c(1:9, 22:50),-c(1, 3:5)]

在這行代碼裡,我們不是對我們想要返回的行和列進行子集化,而是對我們不希望返回的行和列進行子集化,然後使用 「-」 符號省略它們。 如果我們現在調用 ed_exp1 和 ed_exp2,我們可以看到兩個數據框都返回原始 education 數據框相同的子集。

上面這些在 R 中對小數據框進行子集的基本方法在大型數據集中會變得單調缺乏靈活性,因為我們必須知道所要提取的子集的確切列和行索引號。如果一個數據只有 7 列 50 行,找到所需的列和行會非常簡單,但是如果這個數據有 70 列和 5000 行呢?在這種情況下,如何找到所需的列和行?下面是另一種在 R 中提取數據框子集的方法。

ed_exp3 <- education[which(education$Region == 2), names(education) %in% c("State", "Minor.Population", "Education.Expenditures")]

我們來看看這段命令發生了什麼。

首先,我們使用了跟前兩個例子一樣的方括號技術來提取 education 數據框的子集。但是,這一次,我們使用了 which()函數提取我們需要的行。 此函數返回了 education 數據框中 Region 列值為 2 的索引。這為我們提供了所需的行。

然後,我們通過在 education 數據框的名稱上使用 %in%運算符來檢索子集的列。

現在,有些人看著這行代碼覺得它太複雜了。 必須有一種更簡單的方法來做到這一點。 好吧,你會是對的。 R 中還有另一個基本功能,它允許我們在不知道行和列引用的情況下對數據框進行子集化。 使用名字來提取? 你猜對了:subset()。

ed_exp4 <- subset(education, Region == 2, select = c("State","Minor.Population","Education.Expenditures"))

subset()函數有 3 個參數:我們想要子集化的數據框,我們希望它進行子集化處理對應的行,以及我們想要返回的列。 在我們的例子中,我們採用 「Region」 等於 2 的 education 子集,然後選擇 「State」, 」Minor.Population」 和 「Education.Expenditure」 列。

當我們使用上述兩種方法中的任何一種對 education 數據框進行子集化時,我們得到與前兩種方法相同的結果:

除此以外,還有一種我們操作數據最有用的方法。讓我們先來看看代碼,然後我們將討論它。

install.packages("dplyr")library(dplyr)ed_exp5 <- select(filter(education, Region == 2),c(State,Minor.Population:Education.Expenditures))

最後的這一種方法不是 R 基礎環境的一部分。要使用它,我們必須安裝並下載 dplyr軟體包。如果你要使用 R 中的數據,這肯定是一個你想要的包。 它是 R 環境中下載次數最多的軟體包之一,當你開始使用它時,你很快就會明白為什麼。

因此,一旦我們下載了 dplyr,我們就可以使用此包中的兩個不同函數創建一個新的數據框:

filter:第一個參數是數據框; 第二個參數是我們希望它被子集化的條件。 結果是整個數據框只有我們想要的行。

select:第一個參數是數據框; 第二個參數是我們想要從中選擇的列的名稱。我們不必使用 names()函數,甚至不必使用引號。 我們只是將列名列為對象就可以。

在這個例子中,我們將篩選函數(filter)包裝在選擇函數(select)中以返回我們的數據框。 換句話說,我們首先將 Region 為 2 的行作為子集。 然後,我們從那些行中獲取了我們想要的列。 結果為我們提供了一個數據框架,其中包含我們感興趣的 12 個州所需的數據:

最後,回顧一下,這裡有 5 種方法可以在 R 中對數據框進行子集化:

使用括號,通過提取我們想要的行和列來進行子集化;使用括號,通過省略我們不想要的行和列來進行子集化;使用括號,使用 which() 函數和 %in%運算符組合進行子集化;使用 subset()函數;使用 dplyr 包中的 filter()和 select() 函數實現數據框子集化。

相關焦點

  • R語言筆記1:數據類型(向量、數組、矩陣、 列表和數據框)
    學習R語言,需要先安裝R語言,只需要從 https://www.r-project.org/ 下載適合你系統的最新版本軟體安裝即可。R語言有個優秀的環境叫Rstudio,具體安裝可參考  《R語言學習 - 入門環境Rstudio》一文。R語言中的數據類型(Data Types)R語言的對象(Objects)主要包括向量、矩陣、數組、數據框和列表。
  • 彈性中子磁散射方法簡介
    由式(6)可知,通過中子磁散射能夠確定原子坐標r位置的磁化強度M(r)。也就是說通過中子磁散射可以得到和樣品物質的宏觀磁化強度對應的微觀磁矩。我們在不同溫度下用高分辨中子粉末衍射方法對混合稀土(Nd0.5Tb0.5)Co2化合物的晶體結構以及磁結構進行了研究。
  • 彈性中子核散射方法簡介
    我們在這裡先討論彈性中子散射方法,今後再對非彈性中子散射方法進行討論。圖1所示為中子散射實驗的示意圖。圖3 坐標原點處A點與位置r處D點的散射中子束的相位差示意圖。位置r處的散射振幅與該位置的散射密度ρs(r) 成正比,ρs(r)取決於中子束流與樣品物質之間的相互作用。
  • R語言SQL管理資料庫的方法
    #使用SQL語句操作數據框,需要加載的程序包sqldf,tcltk,使用iris數據集以及演示library(sqldf)library(tcltk)head(iris)#了解數據集由5各變量組成#取出前幾行a1r <- head(iris,10)#一般方法
  • 用SQL玩轉R數據框
    當我們用R語言處理數據:檢索,排序,篩選的時候怎覺得力不從心。怎樣用SQL來處理R中的數據呢?用SQL的優勢來武裝R的數據處理更能錦上添花,魚和熊掌兼得。當然我們可以引用R中的sqldf包,讓SQL在R飛起,處理數據就這麼簡單。
  • 數據可視化之R語言
    四折圖是展示2*2*k的三維列聯表的一種方式,這種方法是獲得k個2*2的列聯表的餅圖,列聯表的四個子區域的頻率用四分之一圓表示,半徑和頻率的平方根成比例,和餅圖相比,四折圖的半徑是不同的。可以通過設置horizontal=TRUE將箱線圖調為水平格式,此外,如果數據為數據框並且為響應變量和預測分組變量的形式,則可以使用公示語法——響應變量~預測變量的形式,如> boxplot(grass$rich~grass$graze,data=grass,horizontal=TRUE,
  • 天文學:合併中子星的鍊金術
    天文學家第一次發現了由兩個中子星合併而成的化學元素。潛在的機制稱為r過程(也稱為快速中子捕獲),被認為是大量比鐵重的元素的起源。這一發現為發生這種r過程的環境之謎提供了新的啟示。為了產生更重的原子,科學家懷疑將中子附著到已經存在的構件上的過程。這種機制的快速變體是所謂的r過程(r代表快速)或快速中子捕獲。當前,正在進行研究以確定哪些物體可能是發生該反應的部位。到目前為止,可能的候選者是罕見的超新星爆炸和稠密的恆星殘留物如雙中子星的合併。
  • R數據分析:創建向量的方法
    同一個向量中的數據類型應該相同。R中創建向量的方法,主要有以下幾種:(1)直接創建x1<-1:10 #輸出:[1] 1 2 3 4 5 6 7 8 9 10x2<-4.3 #只包含一個值的向量x3<-TRUE #邏輯型向量,注意在R中,TRUE和FALSE必須大寫x4 <- "I Love China" #字符串型向量在R語言中,<-表示賦值
  • 第7章 pandas文本數據初學者需要掌握的幾種基本的數據預處理方法
    子組與函數替換四、子串匹配與提取1. str.extract方法2. str.extractall方法3. str.contains和str.match五、常用字符串方法1.過濾型方法2. isnumeric方法import pandas as pdimport numpy as np一、string類型的性質1. string與object的區別string類型和object不同之處有三:① 字符存取方法(string accessor methods,如str.count)會返回相應數據的
  • 經典目標檢測方法Faster R-CNN和Mask R-CNN|基於PaddlePaddle深度...
    目前,用於目標檢測的方法通常屬於基於機器學習的方法或基於深度學習的方法。對於機器學習方法,首先使用 SIFT、HOG 等方法定義特徵,然後使用支持向量機 (SVM)、Adaboost 等技術進行分類。對於深度學習方法,深度學習技術能夠在沒有專門定義特徵的情況下進行端到端目標檢測,並且通常基於卷積神經網絡 (CNN)。
  • R 語言之數據分析「Resampling」
    統計假設中有一條,叫做「假定觀測數據抽樣自正態分布或者是是其他性質較好的分布」,那麼當數據集抽樣自「未知分布、混合分布」、樣本容量過小或存在離群點時,傳統的統計方法所得到的模型可能就會不那麼準確,原因之前已經講過,這個時候「Resampling」 的思想就出現了。
  • 中子的壽命到底有多長?多種方法試錯,謎題亟待解決
    運動的中子會迅速衰變成其他粒子,因此中子壽命的精確持續時間的測量比預期難得多,目前有兩種測定方法,但有9秒的偏差。科學家將研究方向轉向太空,初步結果與地球所測還有一些出入,但科學家仍對此途徑充滿希冀。一是「瓶」方法:將俘獲的中子放入容器中,觀察隨著時間的流逝還有多少中子殘餘;這種方法測得中子的一生僅879秒。另一種方法是「束」方法:當中子衰變時探測質子的生成;這種方法測得質子存在了888秒。對比兩組實驗計算出來的誤差,這9秒的差異就是天差地別。因此其中一組數據必定是錯誤的——但科學家們也不知道到底是哪一組。
  • 生物統計專題:用R進行獨立性檢驗的4種方法
    上期內容回顧上期介紹了一維列聯表、二維列聯表及多維列聯表的生成方法,對本期獨立性檢驗和卡方檢驗有重要意義,下面一起回顧一下吧:1、一維列聯表:調用table()函數,還可以使用prop.table()函數獲取頻率統計表
  • 科學家首次使用人工智慧,在中子數據中,尋找亞原子水平的秘密!
    一種這樣的方法是中子散射,在這種方法中,被稱為中子的中性粒子從材料上散射出來,從產生的相互作用中揭示其微觀性質。然而,事實證明,即使對經驗豐富的專家來說,重建材料的結構和性能也具有挑戰性。美國能源部橡樹嶺國家實驗室(ORNL)的科學家,首次使用人工智慧(AI)在中子散射數據中尋找模式,這些模式可以導致對量子或複雜磁性材料內部物理的理解。
  • 5種高效利用value-counts函數的方法,一鍵提升數據挖掘姿勢水平
    數據挖掘是機器學習領域的一個重要組成部分。在確定訓練哪種模型以及訓練多少模型之前,我們必須對數據包含的內容有所了解。Pandas 庫為此提供了許多有用的函數,value_counts 就是其中之一。此函數返回 pandas 數據框中各個項的數量。但在使用 value-counts 函數的大多數時候用到的是默認參數。
  • 非彈性中子磁散射方法簡介之自旋波激發
    中子在被材料體系散射後,我們通過測量被樣品散射的中子在樣品和探測器之間已知的固定距離的飛行時間,就能夠得到被散射中子的能量,從而判斷中子和樣品之間的能量交換,實現對非彈性中子散射的能量分析。然而採用飛行時間方法用到的中子脈衝都是微秒級別,在第一束中子到達探測器之後下一束中子脈衝才能開始飛行,因此這一方法更適用於脈衝式散裂中子源。
  • R數據科學--第九章 dplyr處理關係數據
    1.簡介• 合併連接:向數據框中加入新變量,新變量的值是另一個數據框中的匹配觀測。• 篩選連接:根據是否匹配另一個數據框中的觀測,篩選數據框中的觀測。• 集合操作:將觀測作為集合元素來處理 2. nycflights13除了flight外,還有另外四個相關數據框。分別描述航空公司、機場、飛機、天氣。我喜歡以標準表格的形式觀察每個數據框。
  • EBSD晶體學織構基礎及數據處理
    S取向的5種表示取向表達的數學互換取向的等價形式對於立方晶體,每個取向有24種等價形式: (301, 36.7,26.7)=(123)[63-4](1)X射線法、中子衍射法(2)TEM及菊池花樣分析技術(TEM/SAD/MBED/CBED)(3)三維X射線顯微分析技術測量塊狀樣品內部的晶體結構及取向–用晶體衍射的方法
  • 數據科學家必備的5種離群點/異常檢測方法
    字幕組雙語原文:數據科學家必備的5種離群點/異常檢測方法英語原文:5 Ways to Detect Outliers/Anomalies That Every Data Scientist Should Know
  • r 秩和檢驗 - CSDN
    (file.choose())在這裡,我們將使用一個示例數據集,其中包含18個人(9名女性和9名男性)的權重:# women_weight <- c(38.9, 61.2, 73.3, 21.8, 63.4, 64.6, 48.4, 48.8, 48.5)men_weight <- c(67.8, 60, 63.4, 76, 89.4, 73.3,