2016-09-28 36 views
3

我知道這個問題是之前做出的,但是我的問題與我所看到的有點不同。以前的問題和答案我無法解決。按另一個d.frame的列對d.frame進行排序R

我想使用另一個數據框的列對數據框進行排序。但有一個特點。第一個數據幀對於每個IID都有幾行。下面是數據結構和問題的一個例子:

x<-c(rep("sc256",times=5),rep("sc784",times=5),rep("sc326",times=5),rep("sc120",times=5)) 
x2<-c("sc256","sc784","sc326","sc120") 
y<-round(runif(20,1,10),digits=3) 
y2<-round(runif(20,10,20),digits=3) 
y3<-c(2,1,2,1) 

M1<-data.frame(x,y,y2) 
M2<-data.frame(x2,y3) 
M2$y3<-as.factor(M2$y3) 

M2.s<-M2[order(M2$y3),] 
M1.s<-M1[order(M2.s$x),] 

這個腳本會產生一個數據幀M1.s類似如下:

 x  y  y2 
2 sc256 6.585 17.115 
3 sc256 7.794 14.855 
4 sc256 5.038 15.650 
1 sc256 7.451 16.205 

這是不是我要找的。我正在尋找的是由M2的第一列排列的東西像這樣的M1數據的基礎上:

x  y  y2 
6 sc784 2.828 13.974 
7 sc784 3.966 17.332 
8 sc784 4.733 12.948 
9 sc784 6.933 12.088 
10 sc784 3.182 14.913 
11 sc326 5.189 11.808 
12 sc326 5.660 19.475 
13 sc326 2.403 14.719 
14 sc326 4.881 13.884 
15 sc326 3.913 10.947 
16 sc120 9.122 17.839 
17 sc120 4.676 10.343 
18 sc120 9.184 18.367 
19 sc120 7.671 18.212 
20 sc120 5.302 11.500 
1 sc256 7.451 16.205 
2 sc256 6.585 17.115 
3 sc256 7.794 14.855 
4 sc256 5.038 15.650 
5 sc256 1.684 14.698 

這確實是我的問題的一個小樣本,因爲在我的實際數據我有幾千行。當我試圖將這個腳本應用到我的真實數據時,我得到了這個錯誤:

Error in Fula[order(Fula.s$levels.dat.IID.), ] : subscript out of bounds 

我不知道什麼意思!

+0

嗨,如果有答案解決了你的問題,你可以點擊「接受它」,讓其他人可以看到它嗎?謝謝 – agenis

回答

2

這裏有一個可能性:

> M1.s<-M1[order(M2$y3[match(M1$x,M2$x)]),] 
> M1.s 
     x  y  y2 
6 sc784 5.193 19.458 
7 sc784 6.307 14.398 
8 sc784 1.042 11.436 
9 sc784 5.392 15.096 
10 sc784 9.124 13.521 
16 sc120 6.496 19.087 
17 sc120 3.128 12.793 
18 sc120 8.870 10.844 
19 sc120 1.245 18.832 
20 sc120 3.448 11.475 
1 sc256 2.426 13.556 
2 sc256 4.208 11.488 
3 sc256 6.842 12.782 
4 sc256 9.088 13.648 
5 sc256 5.746 11.052 
11 sc326 6.421 17.500 
12 sc326 6.938 16.412 
13 sc326 8.216 14.833 
14 sc326 6.500 10.606 
15 sc326 3.897 10.517 
+0

謝謝!完美地工作! – Cebs

0

使用dplyr庫:

library(dplyr) 
M2 %>% arrange(y3) %>% select(x2) %>% left_join(M1, by=c("x2"="x")) 
#### x2  y  y2 
#### 1 sc784 4.891 12.442 
#### 2 sc784 3.850 19.154 
#### 3 sc784 5.181 14.104 
#### 4 sc784 1.359 11.206 
#### 5 sc784 7.922 10.257 
#### 6 sc120 8.402 10.958 
#### 7 sc120 6.724 17.047 
#### 8 sc120 5.451 18.919 
#### 9 sc120 2.160 13.177 
#### 10 sc120 9.573 10.977 
#### 11 sc256 7.034 15.335 
#### 12 sc256 7.758 19.715 
#### 13 sc256 3.199 19.395 
#### 14 sc256 7.698 10.704 
#### 15 sc256 7.164 12.088 
#### 16 sc326 8.525 17.018 
#### 17 sc326 7.844 15.564 
#### 18 sc326 7.008 16.835 
#### 19 sc326 4.272 10.176 
#### 20 sc326 5.889 17.272 

注意:您應該定義一個set.seed,以便它的重複性...

+0

非常感謝。但是,當我用我的真實數據使用腳本時遇到問題:出現此錯誤: Fula.sor <-Fula.s %>%排列(fr2)%>%select(levels.dat.IID。)%>%left_join(Fula ,by = c(「IID」=「levels.dat.IID。」)) – Cebs

+0

@Cebs ok,似乎youdid'nt粘貼完整的錯誤文本...? – agenis

1

在你的問題無論是M1和M2 data.frame具有相同的第一列的順序(或者我錯過了你的問題中的某些東西)。我假設你有一個data.frame,它很大,你想按照較短數據框的第一列排序。由於這些列的因素,我們可以通過調平大數據框的短單的順序做到這一點:

x<-c(rep("sc256",times=5),rep("sc784",times=5),rep("sc326",times=5),rep("sc120",times=5)) 
# Change the order of second data.frame because otherwise nothing needs to be ordered 
x2<-c("sc784","sc326","sc256", "sc120") 
y<-round(runif(20,1,10),digits=3) 
y2<-round(runif(20,10,20),digits=3) 
y3<-c(2,1,2,1) 

M1<-data.frame(x,y,y2) 
M2<-data.frame(x2,y3) 
M2$y3<-as.factor(M2$y3) 

new.order <- M2$x2 
M1.s <- M1 
M1.s$x <- ordered(M1.s$x, new.order) 
M1.s <- M1.s[order(M1.s$x),] 
M1.s 

     x  y  y2 
6 sc784 5.555 13.150 
7 sc784 8.647 12.967 
8 sc784 7.338 11.909 
9 sc784 1.272 15.863 
10 sc784 6.477 17.091 
11 sc326 5.240 15.350 
12 sc326 7.923 18.450 
13 sc326 7.258 13.867 
14 sc326 3.132 19.233 
15 sc326 4.373 15.142 
1 sc256 8.160 17.038 
2 sc256 1.775 15.460 
3 sc256 9.310 19.261 
4 sc256 8.354 14.930 
5 sc256 1.724 19.410 
16 sc120 8.284 12.614 
17 sc120 1.479 17.149 
18 sc120 8.164 14.561 
19 sc120 3.469 16.971 
20 sc120 4.083 10.136 

如果您想通過像M2$y3一些列訂購只是爲了M2,然後再重複:

M2 <- M2[order(M2$y3),] 
sorted.by.y3 <- M2$x2 
M1.s$x <- ordered(M1.s$x, sorted.by.y3) 
M1.s[order(M1.s$x),] 
M1.s 

     x  y  y2 
1 sc256 8.160 17.038 
2 sc256 1.775 15.460 
3 sc256 9.310 19.261 
4 sc256 8.354 14.930 
5 sc256 1.724 19.410 
6 sc784 5.555 13.150 
7 sc784 8.647 12.967 
8 sc784 7.338 11.909 
9 sc784 1.272 15.863 
10 sc784 6.477 17.091 
11 sc326 5.240 15.350 
12 sc326 7.923 18.450 
13 sc326 7.258 13.867 
14 sc326 3.132 19.233 
15 sc326 4.373 15.142 
16 sc120 8.284 12.614 
17 sc120 1.479 17.149 
18 sc120 8.164 14.561 
19 sc120 3.469 16.971 
20 sc120 4.083 10.136 
相關問題