2017-12-16 3 views
0

"threshold"という名前の新しい変数を追加しようとしているデータセットdatpがあります。私が追加しなければならない値は、このように見えるテストデータフレームに格納されます(国名はrownames、所得は唯一の変数です)。私は主なデータセット( "DatP")内の各国の収入値を計算し、その結果得られたベクトルを1つの変数について32の観測値を持つ "テスト"データフレームとして保存しました。名前に基づいて値をコピー貼り付けするループR

AT 42617.1 
BE 43575.0 
BG 35639.4 
CH 63240.6 
CY 28153.2 
CZ 33948.6 

私は私の新しい変数を追加したい元のデータセットに持っている国の変数私のテストデータフレーム内rownamesと同じ国コードを持っているという名前PB020、

head(levels(datP$PB020)) 
[1] "AT" "BE" "BG" "CH" "CY" "CZ" 

しかしための方法の詳細な観察それぞれの国。今度は、各国コードの結果を32回貼り付けることができます。

datP$threshold[datP$PB020=="AT"]<-test$AT 
datP$threshold[datP$PB020=="BE"]<-test$BE 

明らかにこれはばかげています。私は私の人生のために適切なループを書くことはできません、私はかなりのすべてのバージョンを試して、すべてのドキュメントと例を読んで正直言って、私はそれを理解していません。これを簡単かつ自動的に行う方法はありますか?私は例を探すことを試みました(そして、私は非常に申し訳ありません、この質問はおそらく以前に尋ねられたでしょう)が、私は何をしようとしているのか分かりませんので、私が見た事例のどれもが私のケースに合っていませんでした。

多くの感謝!

+0

これは、結合/マージプロセスのようです。あなたはそれらを試しましたか? – AntoniosK

答えて

2
# country dataset (might have other columns as well) 
df1 = data.frame(PB020 = c("AT", "BE", "BG", "CH", "BE", "BG", "CY", "CZ")) 

df1 

# PB020 
# 1 AT 
# 2 BE 
# 3 BG 
# 4 CH 
# 5 BE 
# 6 BG 
# 7 CY 
# 8 CZ 

# threshold dataset 
df2 = read.table(text = " 
       thr 
       42617.1 
       43575.0 
       35639.4 
       63240.6 
       28153.2 
       33948.6 
       ", header=T) 

row.names(df2) = c("AT", "BE", "BG", "CH", "CY", "CZ") 

df2 

#  thr 
# AT 42617.1 
# BE 43575.0 
# BG 35639.4 
# CH 63240.6 
# CY 28153.2 
# CZ 33948.6 

# add row names as a variable 
df2$Country = row.names(df2) 

# merge them 
merge(df1, df2, by.x="PB020", by.y="Country", all.x = T) 

# PB020  thr 
# 1 AT 42617.1 
# 2 BE 43575.0 
# 3 BE 43575.0 
# 4 BG 35639.4 
# 5 BG 35639.4 
# 6 CH 63240.6 
# 7 CY 28153.2 
# 8 CZ 33948.6 
+1

ありがとうございます、問題は私のテストデータフレームでは、国コードは変数ではなく、rownamesです。私は主なデータセット( "DatP")の各国の収入額を計算し、その結果得られたベクトルを1つの変数(所得)の32の観測値を持つ "テスト"データフレームとして保存しました。それが私が必要とする合併ではない理由です(私は思っています)。 –

+0

解決策が更新されました。列名は、結合の前に列/変数として追加されます。それはうまくいけばあなたの問題を解決するでしょう。 – AntoniosK

+1

ありがとうございました! –

関連する問題