您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關R語言中根據數據框的順序進行篩選的示例分析,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
這里有兩個數據框,兩者有相同的列(ID),這里想把第一個數據框,按照第二個數據框的ID列進行提取,順序和第二個數據框一致。
> tt = data.frame(id = 1:10,y = rnorm(10))
> tt
id y
1 1 0.7264999
2 2 -1.3817018
3 3 -0.8626703
4 4 2.0663756
5 5 0.1997253
6 6 0.5968497
7 7 -0.8836847
8 8 2.2224643
9 9 -1.5825250
10 10 -0.1530456
> id = data.frame(id = c(2,1,5,4,3))
> id
id
1 2
2 1
3 5
4 4
5 3
%in%
進行提取,會自動排序> # 使用 %in% 進行匹配時,會自動排序,不是id的順序
> tt[tt$id %in% id$id,]
id y
1 1 0.7264999
2 2 -1.3817018
3 3 -0.8626703
4 4 2.0663756
5 5 0.1997253
> id
id
1 2
2 1
3 5
4 4
5 3
可以看到,匹配后的順序為1,2,3,4,5
,而不是原來的2,1,5,4,3
> # 使用match可以達到目的
> loc = match(id$id,tt$id)
> loc
[1] 2 1 5 4 3
> tt[loc,]
id y
2 2 -1.3817018
1 1 0.7264999
5 5 0.1997253
4 4 2.0663756
3 3 -0.8626703
match
真香「完整代碼:」
# 模擬兩個數據框
tt = data.frame(id = 1:10,y = rnorm(10))
tt
id = data.frame(id = c(2,1,5,4,3))
id
# 使用 %in% 進行匹配時,會自動排序,不是id的順序
tt[tt$id %in% id$id,]
id
# 使用match可以達到目的
loc = match(id$id,tt$id)
loc
tt[loc,]
本來我是有兩個系譜文件,第一個系譜文件比較多,但是有錯誤。第二個系譜文件是第一個系譜文件的子集,它的系譜是正確的。我想將第一個系譜文件錯誤的系譜矯正一下。
「我的思路:」
1,用%in%
將第一個系譜的ID,根據第二個系譜的ID提取出來,然后用第二個系譜的Sire和Dam把第一個系譜相應的IID的Sire和Dam替換掉。如果第二個系譜本身是排序的,那么這樣操作是沒問題的。
「潛在的bug」
如果第二個系譜不是按順序排的,那么上面的操作就會有錯誤。比如類似(2,1,4,3,5),在匹配后的順序是(1,2,3,4,5),你用(1,2,3,4,5)的父母本,替換為(2,1,5,3,5)的父母本,肯定是錯誤的。
以上就是R語言中根據數據框的順序進行篩選的示例分析,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。