【R語言】plyr包和dplyr包

一、plyr包

plyr擴展包主要是實現數據處理中的“分割-應用-組合”(split-apply-combine)策略。此策略是指將一個問題分割成更容易操作的部分,再對每一部分進行獨立的操作,最后將各部分的操作結果組合起來。

plyr擴展包中的主要函數可以用**ply來概括:第一個 * 表示輸入數據的結構,可選的數據結構有a(array)d(data.frame) l (list);第二個 * 表示輸出數據的結構,可選的數據結構除了前面3種以外,還有“_”,它表示不輸出,它的結果常用于繪圖和建立緩存。

plyr包的12個主要函數
輸入輸出數組輸出數據框輸出數據列表無輸出
數組aaplyadplyalplya_ply
數據框daplyddplydlplyd_ply
列表laplyldplyllplyl_ply

?按照輸入數據的結構可以分為3類:

a*ply(.data, .margins, .fun, ..., .progress="none"):按照維度對數組進行“切片”;

d*ply(.data, .variables, .fun, ..., .progress="none"):按照一列或多列將數據框分為若干子集;

l*ply(.data, .fun, ..., .progress="none"):將列表的每個分量作為子集。

?參數詳解:

.data:表示輸入數據;

.margins:表示數組的邊際,與apply函數的MARGIN類似,也可以為向量。用來描述輸入數據將如何被分割為若干部分;

.variables:表示分組變量,可以有多個變量。用來描述輸入數據將如何被分割為若干部分。

.fun:表示應用于數據各部分的函數,如果沒有指定.fun,則表示從一種數據結構變為另一種數據結構;

...:表示傳遞給.fun的其它參數;

.progress:表示進度條的類型,none表示不顯示進度條,它有text,tk和win三種進度條。

下面用datasets包中的鳶尾花數據集iris和iris3舉例:

library(plyr)
iris.set <- iris
iris3.set <- iris3
class(iris)
class(iris3)

?

若不在.fun指定應用函數,**ply()函數的作用僅僅是將數據集從一種結構轉換為另一種結構

iris.set1 <- dlply(iris.set, .variables="Species")
head(iris.set1)

二、dplyr包

plyr?包雖然功能強大,但在處理大數據集時可能會比較慢。對于更高效的數據處理,可以考慮使用?dplyr?包,它是?plyr?的一個現代替代品,提供了更快的速度和更直觀的語法。

dplyr包主要針對數據框和tibble(tbl_df對象,一種增強的數據框)的操作。tibble數據結構在呈現大型數據集時非常友好。

下面以nyflights13擴展包中的flights數據集為例,此數據集中包含了336776次航班信息。(先安裝install.packages("nyflights13")。

flights數據集就是一個tibble類型的數據框,它和一般數據框的區別是,當打印到控制臺上時會附帶上更多的信息。例如,行數和列數,每一列的數據類型,少量的數據示例及省略的行數、列數和列名。

?1、select()函數

用于選擇需要的變量用在后續的分析上。

library(dplyr)
# 選擇列變量
head(select(flights, year, flight, dest))

如果要從數據中刪除一些變量,可以通過在變量前添加負號(-)來實現。另外,在select()函數中還可以使用一些輔助函數來完成對列的匹配操作:starts_with()、ends_with()、contains()、matches()、num_range()、one_of()和everything()等。

選取以“a”為首字母的變量

library(dplyr)
# 選擇以“a”為首字母的變量
head(select(flights, starts_with("a")))

?選取包含“lay”的變量

library(dplyr)
head(select(flights, contains("lay")))

選取最后單詞為“.time”的變量

library(dplyr)
head(select(flights, matches(".time")))

2、filter()函數

?用于根據條件對數據的列或者記錄進行篩選。

# 選取在7月19日起飛,并且飛行距離大于800的AS或HA航空公司的航班信息
filter(flights, month==7,day==19,distance>800,carrier=="AS"|carrier=="HA")

對比使用with()函數的篩選方法,就會顯得使用filter()函數更加簡潔清晰。

with(flights,flights[month==7 & day==19 & distance > 800 & (carrier=="AS"|carrier=="HA"),])

3、arrange()函數

?若是依據多列數據進行排序,只需按列的順序寫進此函數中即可;如果是逆序排,只需在變量前面加負號或使用rev()函數即可(注意,逆排序中使用負號的情況僅限于數值變量)

# 依次按month、day、carrier、origin和dest對flights進行排序
head(arrange(flights,-month,-day,carrier,origin,dest))

4、mutate()函數

轉換函數,它可以同時修改和增加若干個變量。與R語言中的內置的轉換函數transform()相比,它的優勢是可在同一段代碼中使用剛建立的新變量。

library(dplyr)
library(nycflights13)
# 計算飛行節約的時間和平均每小時所節約的時間
flights1 <- mutate(flights, gain=arr_delay - dep_delay, gain_per_hour= gain/(air_time/60))
head(flights1$gain)
head(flights1$gain_per_hour)

?5、group_by()和summarise()函數

這兩個函數往往一起使用,先對數據集進行分組,然后再按組進行匯總。

先按照航空公司進行分組:

# 先按航空公司進行分組
flights2 <- group_by(flights, carrier)
# 查看分組變量
group_vars(flights2)
# 查看各組的行數
group_size(flights2)

?然后對各航空公司數據進行匯總:

flights3 <- summarise(flights2, dep_delay_mean = mean(dep_delay, na.rm=T),arr_delay_mean = mean(arr_delay, na.rm=T),distance_sd = sd(distance, na.rm=T))
flights3

6、連接函數

inner_join()函數:用于內連接

left_join()函數:用于左連接

right_join()函數:用于右連接

full_join()函數:用于全連接

7、抽樣函數

sample_n()函數:隨機選出指定個數(樣本容量)的樣本數;

sample_frac()函數:隨機選出指定百分比的樣本數。

sample_n(flights,size=8)sample_frac(flights,size=0.10)

8、管道函數%>%

此函數可以通過不斷地疊加,減少代碼量和中間變量,這種寫法極大地提高了代碼的可讀性和可維護性,特別是在進行數據分析和處理數據框(data frames)時。

在疊加過程中,%>%左邊的結果將作為右邊函數的第一個參數

dplyr包中的%>%操作符實際上是從magrittr包中借用的,但dplyr作為數據操作的一個核心包,使得這個操作符在數據科學社區中變得非常流行。

df <- data.frame(id = 1:5,name = c("Alice", "Bob", "Charlie", "David", "Eva"),score = c(85, 90, 95, 88, 92)
)# 使用%>%管道函數
filtered_sorted_df <- df %>%filter(score > 90) %>%  # 過濾出score大于90的行arrange(desc(score)) %>%  # 按score降序排列select(name, score)  # 選擇name和score列print(filtered_sorted_df)

%>%管道函數可以與dplyr包中的其他函數(如mutatesummarisegroup_by等)結合使用:

flights4 <- flights  %>%sample_frac(size = 0.1) %>% # 隨機抽取10%的樣本select(one_of("carrier","month","day","dep_delay","arr_delay","air_time","distance")) %>% # 篩選carrier、month、day等幾列變量mutate(gain = arr_delay - dep_delay,gain_per_hour = gain / (air_time / 60)) %>% # 計算飛行節約時間和平均每小時所節約的時間group_by(carrier,month) %>% # 按航空公司和月份summarise(gain = mean(gain,na.rm = TRUE),distance = mean(distance,na.rm =TRUE)) # 求gain和distance平均值flights4

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/894991.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894991.shtml
英文地址,請注明出處:http://en.pswp.cn/news/894991.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【DeepSeek】DeepSeek小模型蒸餾與本地部署深度解析DeepSeek小模型蒸餾與本地部署深度解析

一、引言與背景 在人工智能領域&#xff0c;大型語言模型&#xff08;LLM&#xff09;如DeepSeek以其卓越的自然語言理解和生成能力&#xff0c;推動了眾多應用場景的發展。然而&#xff0c;大型模型的高昂計算和存儲成本&#xff0c;以及潛在的數據隱私風險&#xff0c;限制了…

程序員也可以這樣賺錢

最近有朋友和我交流了關于程序員副業的想法&#xff0c;我想借這個機會對目前軟件開發常用的兼職平臺做一個梳理。 以下是程序員接副業的靠譜平臺推薦&#xff0c;結合政策合規性、平臺口碑及實際操作性整理&#xff0c;覆蓋國內外主流選擇&#xff1a; 一、國內綜合型平臺 程序…

【AI】在Ubuntu中使用docker對DeepSeek的部署與使用

這篇文章前言是我基于部署好的deepseek-r1:8b模型跑出來的 關于部署DeepSeek的前言與介紹 在當今快速發展的技術環境中&#xff0c;有效地利用機器學習工具來解決問題變得越來越重要。今天&#xff0c;我將引入一個名為DeepSeek 的工具&#xff0c;它作為一種強大的搜索引擎&a…

代碼隨想錄算法【Day39】

Day39 198.打家劫舍 class Solution { public:int rob(vector<int>& nums) {if (nums.size() 0) return 0;if (nums.size() 1) return nums[0];vector<int> dp(nums.size());dp[0] nums[0];dp[1] max(nums[0], nums[1]);for (int i 2; i < nums.size…

TCP三次握手全方面詳解

文章目錄 (1) 三次握手各狀態CLOSE狀態SYN_SENT狀態SYN_RECV狀態ESTABLISHED狀態 (2) 為什么握手時的seqnum是隨機值&#xff0c;以及acknum的功能(3) 三次握手中的半連接隊列&#xff08;SYN隊列&#xff09;和全連接隊列&#xff08;ACCEPT隊列&#xff09;半連接隊列全連接隊…

數據結構與算法-遞歸

單路遞歸 二分查找 /*** 主函數&#xff1a;執行二分查找。* * param a 要搜索的數組&#xff08;必須是已排序的&#xff09;* param target 目標值* return 返回目標值在數組中的索引&#xff1b;如果未找到&#xff0c;則返回 -1*/ public static int binarySearch(int[] …

軟中斷和tasklet的區別是什么?

軟中斷和 tasklet 都是 Linux 內核中用于實現異步事件處理的機制&#xff0c;它們的主要區別如下&#xff1a; 實現機制 軟中斷&#xff1a;是一種基于軟件觸發的中斷機制&#xff0c;在內核中是一組靜態定義的、預先分配好的軟中斷向量。每個軟中斷都有一個唯一的編號和對應…

Termux安裝ssh實現電腦ssh

Termux下載 點擊下載 在 Termux 中安裝并使用 SSH&#xff0c;按照以下步驟操作&#xff1a; 1. 更新軟件包列表 pkg update && pkg upgrade2. 安裝 OpenSSH pkg install openssh3. 設置 SSH 密碼&#xff08;必須&#xff0c;否則無法使用 SSH 服務器&#xff09…

深入理解 C++17 std::is_swappable

文章目錄 深入理解 C17 std::is_swappable引言std::is_swappable 概述std::is_swappable 的工作原理std::is_swappable 的變體注意事項結論 深入理解 C17 std::is_swappable 引言 在 C 編程中&#xff0c;交換兩個對象的值是一個常見的操作。為了確保代碼的通用性和安全性&am…

51單片機之馮·諾依曼結構

一、概述 8051系列單片機將作為控制應用最基本的內容集成在一個硅片上&#xff0c;其內部結構如圖4-1所示。作為單一芯片的計算機&#xff0c;它的內部結構與一臺計算機的主機非常相似。其中微處理器相當于計算機中的CPU&#xff0c;由運算器和控制器兩個部分構成&#xff1b;…

w~Transformer~合集5

我自己的原文哦~ https://blog.51cto.com/whaosoft/12406495 #transformer~x1 太可怕了都到6了 太強~~ DeepMind 表示&#xff0c;他們提出的算法蒸餾&#xff08;AD&#xff09;是首個通過對具有模仿損失的離線數據進行順序建模以展示上下文強化學習的方法。同時基于觀察…

c#對接deepseek 聊天AI接口

注意&#xff1a;不是免費 對接文檔&#xff1a;對話補全 | DeepSeek API Docs 注冊地址&#xff1a;DeepSeek 申請key 在線請求示例 apifox deepseek - deepseek

23.PPT:校攝影社團-攝影比賽作品【5】

目錄 NO12345? NO6 NO7/8/9/10? 單元格背景填充表格背景填充文本框背景填充幻燈片背景格式設置添加考生文件夾下的版式 NO12345 插入幻燈片和放入圖片?快速&#xff1a;插入→相冊→新建相冊→文件→圖片版式→相框形狀→調整邊框寬度左下角背景圖片&#xff1a;視圖→…

創新領先!珈和科技獲評省級企業技術中心

為充分發揮中小企業創新主體作用&#xff0c;提高自主創新、集成創新和引進消化吸收再創新能力&#xff0c;增強創新驅動發展的動力&#xff0c;做好專精特新“小巨人”企業的培育工作。 近日&#xff0c;湖北省經信廳對申報2024年湖北省中小企業技術中心的企業進行審核認定并…

Android車機DIY開發之軟件篇(十二)編譯Automotive OS錯誤(3)

Android車機DIY開發之軟件篇(十二)編譯Automotive OS錯誤(3) 問題 [ 85% 113538/132897] //hardware/interfaces/neuralnetworks/1.1/utils:neuralnetworks_utils_hal_1_1 clang src/Device.cpp [ 85% 113539/132897] //hardware/interfaces/neuralnetworks/1.1/utils:neural…

初次體驗Tauri和Sycamore (2)

原創作者&#xff1a;莊曉立&#xff08;LIIGO&#xff09; 原創時間&#xff1a;2025年2月8日&#xff08;首次發布時間&#xff09; 原創鏈接&#xff1a;https://blog.csdn.net/liigo/article/details/145520637 版權所有&#xff0c;轉載請注明出處。 關鍵詞&#xff1a;Sy…

iPhone 在華銷量大幅下挫

iPhone在喬布斯時代締造的神話在中國正逐漸走向沒落&#xff0c;擠牙膏式的升級方式類似于諾基亞的N70系列&#xff0c;毫無新意的創新能力&#xff0c;求穩著陸的經營理念&#xff0c;工藝和美學不再獨領風騷&#xff0c;甚至拍照領域和AI增強計算&#xff0c;折疊屏等技術領域…

vs封裝dll 給C#使用

一&#xff0c;vs創建控制臺應用 創建控制臺應用得好處時&#xff0c;我們可以自己測試接口&#xff0c;如果接口沒有問題&#xff0c;改成dll重新編譯一遍就可以。 二&#xff0c; 創建一個c 類&#xff0c;將所需提供得功能 封裝到類中。 這樣可以將 所有功能&#xff0c;進…

懸鏈線的方程及其推導過程

懸鏈線的方程及其推導過程 懸鏈線是描述理想鏈條或柔軟繩索在重力作用下的自然形態的數學曲線。其特征在于&#xff1a;如果將一根均勻、不可伸長的鏈條兩端懸掛在固定點上&#xff0c;鏈條所呈現的形狀就會遵循一種特殊的曲線&#xff0c;這個曲線就是懸鏈線。 懸鏈線的方程…

緊跟潮流,將 DeepSeek 集成到 VSCode

Visual Studio Code&#xff08;簡稱 VSCode&#xff09;是一款由微軟開發的免費開源代碼編輯器&#xff0c;自 2015 年發布以來&#xff0c;憑借其輕便、強大、且擁有豐富擴展生態的特點&#xff0c;迅速成為了全球開發者的首選工具。VSCode 支持多平臺操作系統&#xff0c;包…