2016-04-08 33 views
0

私はRには新しく、ここにデータを構造化するための助けが必要です。R:別のデータフレームから対応する値を取得

私は2つのデータセットを持っています。もう一つはワイドフォーマットとルックスで、すでにある

long.format <- data.frame(subject.no = c(1, 1, 1, 1, 2, 2, 2, 2), condition = c("prime", "prime", "prime", "prime", "control", "control","control","control"), response = c(1,1,1,0,1,1,1,0)) 

    subject.no condition response 
>1   1  prime  1 
>2   1  prime  1 
>3   1  prime  1 
>4   1  prime  0 
>5   2 control  1 
>6   2 control  1 
>7   2 control  1 
>8   2 control  0 

:それらの 一つが大きく、このような少し見える被験者データセット内の長い形式ですこの

wide.format <- data.frame(subject = c(1, 2), age = c(26,27), gender = c("m","f")) 

    subject age gender 
>1  1 26  m 
>2  2 27  f 

のように私が今やりたい唯一のことは、「条件」の値を取得することです(そしてこれだけ!)幅のデータフレーム内の対応する被写体までの長い形式のデータフレームから追加することにより、ワイドデータフレームの新しい列(列を使用してsubject.noおよびsubject)。

だから、最後のデータフレームは次のようになります。

wide.format.aim <- data.frame(subject = c(1, 2), age = c(26,27), gender = c("m","f"), condition = c("prime","control")) 

     subject age gender condition 
>1  1 26  m  prime 
>2  2 27  f control 

私がマージしようとしたが、これはワイドフォーマットのデータフレームからの情報を付加し、長い形式のデータフレームになってしまった...しかし、

test.it <- merge(x=wide.format, y=long.format[,c("subject.no", "condition")], all.x=T, by.x="subject", by.y="subject.no") 

任意の提案:私は

これは私が試したものです...それ他の方法で回避したいですか?

ありがとうございます!

+0

それらの値(申し訳ありませんが、これは本当の変数名である) テストを使用してマージすることができます。それは、x = data.values、y = data [、c( "subject_nr"、 "Bedingung")]、all.x = T、by.x = "vp.list"、by.y = "subject_nr ") - しかし、これはうまくいきませんでした(あなたが好きなのはもっと言葉で何が起こったのか説明できます...) – Mathias

+0

大丈夫です!これは今理解しやすいと思っています – Mathias

答えて

0

あなたがlong.format[,c("subject.no", "condition")]から一意の値をマージされています:

unique(long.format[,c("subject.no", "condition")]) 
# subject.no condition 
#1   1  prime 
#5   2 control 

あなたは、私がマージしようとしている

merge(x = wide.format, 
     y = unique(long.format[,c("subject.no", "condition")]), 
     by.x = "subject", 
     by.y = "subject.no") 
# subject age gender condition 
#1  1 26  m  prime 
#2  2 27  f control 
+0

正しい場所に「ユニークな」という簡単な単語が1つしかありませんでした...うまくいきましたので、ありがとうございます! – Mathias

+0

@Mathias既存のコードの周りに 'unique()'をスローすることもできますが、最初にマージして重複を除外するのではなく、一意のサブセットをマージする方が効率的です。 – Jota

関連する問題