2014-09-04 3 views
0

변수가있는 데이터 프레임이 여러 번 나타나고 두 번째 데이터 프레임에이 변수의 고유 한 수준에 대한 코드가 포함되어 있습니다. 내 데이터 프레임에 코드가 포함 된 열을 추가하고 싶습니다. 예를 들면 다음과 같습니다 :행 이름을 기반으로 데이터 프레임에 열을 병합 및 확장

f1 <- rep(c("A","B","C"), each = 3) 
df1 <- data.frame(f1,v1=runif(9)) 

    f1   v1 
1 A 0.83523506 
2 A 0.13833162 
3 A 0.15354252 
4 B 0.62046499 
5 B 0.27823892 
6 B 0.04629973 
7 C 0.85571269 
8 C 0.10963561 
9 C 0.70576556 

df2 <- data.frame(f1=c("A","B","C"), n1=c("sp1","sp2","sp3")) 

    f1 n1 
1 A sp1 
2 B sp2 
3 C sp3 

df3 <- data.frame(f1=rep(c("A","B","C"),each = 3),n1=rep(c("sp1","sp2","sp3"),each =3),v1=df1$v1) 

    f1 n1   v1 
1 A sp1 0.83523506 
2 A sp1 0.13833162 
3 A sp1 0.15354252 
4 B sp2 0.62046499 
5 B sp2 0.27823892 
6 B sp2 0.04629973 
7 C sp3 0.85571269 
8 C sp3 0.10963561 
9 C sp3 0.70576556 

df3을 얻기위한 함수를 찾고 싶습니다.

답변

0

이 기본 기능 merge를 사용하는 방법

많이

merge(df1,df2) 

여기 dplyr

library(dplyr) 
df1 %>% 
    left_join(df2) 

# f1  v1 n1 
#1 A 0.2283936 sp1 
#2 A 0.3709602 sp1 
#3 A 0.2508059 sp1 
#4 B 0.5654418 sp2 
#5 B 0.3206994 sp2 
#6 B 0.2529365 sp2 
#7 C 0.7200121 sp3 
#8 C 0.5247517 sp3 
#9 C 0.1914874 sp3 

내 번호를 사용하여 다른 하나 간단한되어 있습니다 당신이 set.seed을 사용하지 않은으로 당신에 따라 다릅니다 난수 생성을 설정하려면

+0

고맙습니다. 완벽하게 작동합니다. – user34771

+0

그것은 작동하는 것처럼 보였지만, 결과를 조사한 후에 나는 df를 병합 한 결과로 나타나는 많은 NA 값을 알아 차렸다. 병합 할 변수의 레벨이 같은 순서가 아니기 때문일 수 있습니까? 적절하게 재조정하는 방법? – user34771

+0

글쎄, 더 긴 예제를 만들어야합니다. 병합은 작동하는대로 정렬을 수행하기 때문에 dfs의 순서는 중요하지 않습니다. 병합 할 변수 (df1, df2, by = "f1")를 병합 할 수 있습니다. – jalapic

관련 문제