2014-09-03 2 views
2

다른 테이블의 사람들을 기반으로 dataframe의 행의 순서는 다음과 같습니다: 내가 같은 테이블이

tab1 <- as.table(matrix(c(8,6,9,0,8,4,0,12,7,10), ncol = 2, byrow = FALSE, 
    dimnames = list(site = c("beta", "alpha", "gamma", "theta", "delta"), 
    count = c("low", "high")))) 
> tab1 
     count 
site low high 
beta 8 4 
alpha 6 0 
gamma 9 12 
theta 0 7 
delta 8 10 

및 siteID의에 사이트 이름에 매핑하는 data.frame :

data.frame(site = c("alpha", "beta", "gamma", "delta", "theta"), siteId = c(1102, 3154, 9000, 1101, 1103)) 
    site siteId 
1 alpha 1102 
2 beta 3154 
3 gamma 9000 
4 delta 1101 
5 theta 1103 

마지막으로, 나는이 siteID의 일부 다른 변수를 포함하는 data.frame이 : 나는 내가 할 수있을 필요가있는 무엇

data.frame(siteId = c(1101, 1102, 1103, 3154, 9000), treatment = c("A", "B", "C", "E", "F")) 
    siteId treatment 
1 1101   A 
2 1102   B 
3 1103   C 
4 3154   E 
5 9000   F 

들 TAB1의 행이 주문한 것과 같은 방식으로 마지막 dataframe의 열을 주문하는, 그래서 양보해야

siteId treatment 
1 3154   E 
2 1102   B 
3 9000   F 
4 1003   C 
5 1001   A 

내가 할 수있는 방법 정교한 루프에 참여하지 않고, 그? 실제 데이터 세트는 꽤 크기 때문에 루핑은 내가 원하는 것보다 훨씬 많은 시간이 걸릴 것입니다.

+0

관련 질문을 찾아 주셔서 감사합니다. 내 질문보다 약간 간단하지만 실제로는 매우 유사합니다. –

답변

2

다른 데이터 프레임의 ID를 match 개 입력하면됩니다. 그런데 데이터 프레임 a에서 을 theta으로 변경했습니다. tab1에는 엡실론이 없기 때문입니다.

tab1 <- as.table(matrix(c(8,6,9,0,8,4,0,12,7,10), ncol = 2, byrow = FALSE, 
               dimnames = list(site = c("beta", "alpha", "gamma", "theta", "delta"), 
                       count = c("low", "high")))) 


a = data.frame(site = c("alpha", "beta", "gamma", "delta", "theta"), siteId = c(1102, 3154, 9000, 1101, 1103)) 
b = data.frame(siteId = c(1101, 1102, 1103, 3154, 9000), treatment = c("A", "B", "C", "E", "F")) 

# put a in the order of tab1 
a = a[match(a$site,rownames(tab1)),] 

# put b in order of a 
b = b[match(a$siteId, b$siteId),] 

> b 
# siteId treatment 
#4 3154   E 
#2 1102   B 
#5 9000   F 
#3 1103   C 
#1 1101   A 
+0

우수 답변, 감사합니다! 그것은 내가 찾고 있던 것을 정확하게합니다. –

관련 문제