溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

R語言中根據(jù)數(shù)據(jù)框的順序進行篩選的示例分析

發(fā)布時間:2021-11-22 09:50:59 來源:億速云 閱讀:286 作者:柒染 欄目:大數(shù)據(jù)

本篇文章給大家分享的是有關R語言中根據(jù)數(shù)據(jù)框的順序進行篩選的示例分析,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

目的

這里有兩個數(shù)據(jù)框,兩者有相同的列(ID),這里想把第一個數(shù)據(jù)框,按照第二個數(shù)據(jù)框的ID列進行提取,順序和第二個數(shù)據(jù)框一致。

數(shù)據(jù)框1

> 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
   

數(shù)據(jù)框2

> 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記錄位置,然后根據(jù)位置提取

> # 使用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真香

「完整代碼:」

# 模擬兩個數(shù)據(jù)框
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,根據(jù)第二個系譜的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語言中根據(jù)數(shù)據(jù)框的順序進行篩選的示例分析,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI