2017-12-19 8 views
0

IDの2つの列を含むデータ・フレームを読み込む方法が必要です。基本的に行単位のデータ・フレームを作成し、これらのIDペアを使用して異なるデータフレームを取得し、対応する値を返します。r、IDのデータ・ファイルを使用して値のデータ・フレームを検索し、ペアの値を返す

例えば、私はIDのペアの次のデータフレームを有する:

A <- c("a", "b", "a") 
B <- c("c", "d", "e") 

df_pairs <- data.frame(A, B) 

> df_pairs 
    A B 
1 a c 
2 b d 
3 a e 

を私はそれに対応する値のデータフレームを有する:

id <- c("a", "b", "c", "d", "e") 
val <- c("1", "2", "3", "4", "5") 

df_values <- data.frame(id, val) 

> df_values 
    id val 
1 a 1 
2 b 2 
3 c 3 
4 d 4 
5 e 5 

Iは、データフレームを希望はそれを返さ

A B A_value B_value 
1 a c  1  3 
2 b d  2  4 
3 a e  1  5 

これを分析パイプラインに組み込むことを意図しています。ペアとIDの数は実際のデータによって異なりますので、これをあなたのソリューションで考慮してください。

多くのありがとうございます。

答えて

2

これを試してみてください:

library(dplyr) 
## 
## Attaching package: 'dplyr' 
## The following objects are masked from 'package:stats': 
## 
##  filter, lag 
## The following objects are masked from 'package:base': 
## 
##  intersect, setdiff, setequal, union 
A <- c("a", "b", "a") 
B <- c("c", "d", "e") 

df_pairs <- data.frame(A, B) 

id <- c("a", "b", "c", "d", "e") 
val <- c("1", "2", "3", "4", "5") 

df_values <- data.frame(id, val) 

left_join(df_pairs, df_values, by = c("A" = "id")) %>% 
    left_join(df_values, by =c("B"= "id")) %>% 
    select(A, B, A_value = val.x, B_value = val.y) 
## Warning: Column `A`/`id` joining factors with different levels, coercing to 
## character vector 
## Warning: Column `B`/`id` joining factors with different levels, coercing to 
## character vector 
## A B A_value B_value 
## 1 a c  1  3 
## 2 b d  2  4 
## 3 a e  1  5 

HTH

2

試してみてください。

A <- c("a", "b", "a") 
B <- c("c", "d", "e") 
df_pairs <- data.frame(A, B, stringsAsFactors = FALSE) 

id <- c("a", "b", "c", "d", "e") 
val <- c("1", "2", "3", "4", "5") 
names(val) <- id 

df_quads <- df_pairs 
df_quads$A_value <- val[df_pairs$A] 
df_quads$B_value <- val[df_pairs$B] 

あなたの "値" は、実際に文字

であることに注意してくださいかかわら

> df_pairs 
    A B 
1 a c 
2 b d 
3 a e 

> val 
    a b c d e 
"1" "2" "3" "4" "5" 

> df_quads 
    A B A_value B_value 
1 a c  1  3 
2 b d  2  4 
3 a e  1  5 

を与えること

0

ダブルマージでもこの質問に答えることができます。

merge(
    merge(df_pairs, 
      df_values, 
      by.x=c("A"), 
      by.y=c("id") 
     ), 
    df_values, 
    by.x=c("B"), 
    by.y=c("id") 
    ) 
関連する問題