1.5 篩選數據
在前面的教程中,我們已經簡單地介紹過如何訪問數據集中的數據,比如通過下標或者變量名訪問數據集。這裡,我們再將如何從數據集中篩選數據的技巧集中起來學習一下加深記憶。
1.5.1 通過下標選取數據
通過下標選取相應的數據,是最簡單傳統的方式。下標以 [] 包裹起來,分為行下標和列下標,行下標在前,列下標在後,用逗號隔開。若沒有逗號,則默認為列下標。 下標一般為正數,表明選取相應的行或列;若為負數,則移除指定的行或列。
首先來看選取行(或者觀測、示例或者記錄均可)的示例。
然後,選擇相應的列。可以在列下標籤加逗號,也可以不加。因為下表只有一個數據,沒有逗號的話默認為列下標。
最常用的是行下標和列下標結合使用。
1.5.2 通過邏輯表達式選取數據
除直接指定下標外,也可以通過邏輯表達式選取數據。同樣,行選取邏輯表達式在前,列在後,中間用逗號隔開。若不加逗號,默認為列選取邏輯表達式。邏輯表達式的核心是若結果為 TRUE, 則選取相應數據,若結果為 FALSE,則不選取相應數據。
注意,上述下標中的變量要用全稱,即 trees$Height 這樣的形式,若嫌麻煩,建議使用 with() 或者 within() 函數,當然也可以用 attach() 和 detach() 函數,但建議使用前兩者。也可以通過這種方式剔除相應的列。
1.5.3 通過 subset() 函數選取數據
還可以使用 subset() 函數選取數據。其調用格式為:
參數含義分別是:
x: 需要從中選取數據的對象,可以是矩陣或數據框。
subset: 邏輯表達式,用於計算是否選取相應的行,若計算結果為 TRUE ,則選取行;若為 FALSE,則不選取行。
select : 字符型向量或者列表達式,用於指定要選取的列
典型的用法如下:
注意 subset 函數中列名不用引號。還可以用 : 運算符返回某一範圍內的列:
1.5.4 使用 SQL
如果熟悉 SQL 語言,是不是感覺 subset() 函數和 sql 語句很類似啊,subset 相當於 where,select 相當於 select。那麼能不能直接用 SQL 語句來選取數據呢?這樣已經學過 SQL 語句的就可以直接使用現成的經驗了。答案是有,這就要感謝 R 強大的包機制了,有各種各樣的拓展。用於支持 SQL 語句訪問數據的包是 sqldf 包。
安裝加載後,我們就可以使用 sqldf() 函數來訪問數據了。實現和上面 subset 同樣效果的語句如下:
> sqldf("select mpg,cyl,wt from mtcars where mpg > 20 and cyl > 4") mpg cyl wt1 21.0 6 2.6202 21.0 6 2.8753 21.4 6 3.215
喜歡閒適安靜的生活,懂一點計算機編程,懂一點統計學和數據分析。(愛編程愛統計)