2014-12-05 3 views
1

정확하게 설명 할 수 있을지 모르지만 실제로 달성하기를 원하는 것은 무엇인지 알 수 없습니다.하나의 data.frame에서 값을 찾고 다른 열에서 값을 전송하는 중

첫 번째 data.frame입니다. 나에게 중요한 값은 첫 번째 열에 "V1"에

> dput(Data1) 
structure(list(V1 = c(10L, 5L, 3L, 9L, 1L, 2L, 6L, 4L, 8L, 7L 
), V2 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "NA", class = "factor"), 
    V3 = c(18L, 17L, 13L, 20L, 15L, 12L, 16L, 11L, 14L, 19L)), .Names = c("V1", 
"V2", "V3"), row.names = c(NA, -10L), class = "data.frame") 

둘째 data.frame :

> dput(Data2) 
structure(list(Names = c(9L, 10L, 6L, 4L, 2L, 7L, 5L, 3L, 1L, 
8L), Herat = c(30L, 29L, 21L, 25L, 24L, 22L, 28L, 27L, 23L, 26L 
), Grobpel = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L), .Label = "NA", class = "factor"), Hassynch = c(19L, 12L, 
15L, 20L, 11L, 13L, 14L, 16L, 18L, 17L)), .Names = c("Names", 
"Herat", "Grobpel", "Hassynch"), row.names = c(NA, -10L), class = "data.frame" 

) 

첫 data.frame에서 값이 1 열에서 찾을 수 있고 내가 복사하고 싶습니다 4 열의 값 (Hassynch)을 첫 번째 data.frame의 두 번째 열에 넣습니다.

가장 빠른 방법으로 수행하는 방법은 무엇입니까?

+1

당신은 메이크업 할 수있는 재현 예 : http://stackoverflow.com/a/5963610/1412059합니다. 그러나, 당신이'merge'를 원한다고 생각합니다. – Roland

+0

병합 기능으로 어떻게 할 수 있습니까? –

+1

재현 할 수없는 예제가 없습니다. – Roland

답변

1
library(dplyr) 
left_join(Data1, Data2, by=c("V1"="Names")) 
# V1 V2 V3 Herat Grobpel Hassynch 
# 1 10 NA 18 29  NA  12 
# 2 5 NA 17 28  NA  14 
# 3 3 NA 13 27  NA  16 
# 4 9 NA 20 30  NA  19 
# 5 1 NA 15 23  NA  18 
# 6 2 NA 12 24  NA  11 
# 7 6 NA 16 21  NA  15 
# 8 4 NA 11 25  NA  20 
# 9 8 NA 14 26  NA  17 
# 10 7 NA 19 22  NA  13 

# if you don't want V2 and V3, you could 
left_join(Data1, Data2, by=c("V1"="Names")) %>% 
    select(-V2, -V3) 
# V1 Herat Grobpel Hassynch 
# 1 10 29  NA  12 
# 2 5 28  NA  14 
# 3 3 27  NA  16 
# 4 9 30  NA  19 
# 5 1 23  NA  18 
# 6 2 24  NA  11 
# 7 6 21  NA  15 
# 8 4 25  NA  20 
# 9 8 26  NA  17 
# 10 7 22  NA  13 
0

예를 들어 merge을 설명하기 위해 얼마 전에 만든 장난감의 예입니다. dplyr로부터 left_join도 좋고 data.table은 거의 틀림없이 다른 옵션이 있습니다.

참조 데이터 프레임의 하위 집합으로 키 변수 및 값 변수 만 포함하여 관리하기 어려운 데이터 프레임이되지 않도록 할 수 있습니다.

id<-as.numeric((1:5)) 
m<-c("a","a","a","","") 
n<-c("","","b","b","b") 
dfm<-data.frame(cbind(id,m)) 
head(dfm) 
    id m 
1 1 a 
2 2 a 
3 3 a 
4 4 
5 5 
dfn<-data.frame(cbind(id,n)) 
head(dfn) 
    id n 
1 1 
2 2 
3 3 b 
4 4 b 
5 5 b 

dfm$id<-as.numeric(dfm$id) 
dfn$id<-as.numeric(dfn$id) 

dfm<-subset(dfm,id<4) 
head(dfm) 
    id m 
1 1 a 
2 2 a 
3 3 a 

dfn<-subset(dfn,id!=1 & id!=2) 
head(dfn) 
    id n 
3 3 b 
4 4 b 
5 5 b 

df.all<-merge(dfm,dfn,by="id",all=TRUE) 
head(df.all) 
    id m n 
1 1 a <NA> 
2 2 a <NA> 
3 3 a b 
4 4 <NA> b 
5 5 <NA> b 

df.all.m<-merge(dfm,dfn,by="id",all.x=TRUE) 
head(df.al.lm) 
    id m n 
1 1 a <NA> 
2 2 a <NA> 
3 3 a b 

df.all.n<-merge(dfm,dfn,by="id",all.y=TRUE) 
head(df.all.n) 
    id m n 
1 3 a b 
2 4 <NA> b 
3 5 <NA> b 
관련 문제