2017-10-16 11 views
-2

私はあなたのお役に立てることを願っております。 私はこれを行うさまざまな方法を試してきましたが、正しい答えを見つけることができません。 私はかなり新しくRですが、私が持っているデータをフォーマットするためのスクリプトを書いています。 最終的には、データが入ってくるたびにこのスクリプトを実行したいと考えています。対応する数値/文字を参照するデータフレームに列を追加してください

多くの種類のコードには対応する3文字の国があります(例: GBRまたはNLDなど)。 私がしたいことは、繁殖コードに対応する国コードを含む、自分のデータに新しい列を作成することです。

私が抱えている問題の1つは、すべての数字(1-80)に対応する国コードがあるわけではないということです。 したがって、同じタイプではないので、それらのベクトルをすべて作成することはできません。

関連する国コードがない場合は、国コードを品種コードの番号にしたいと思います。 たとえば、品種コード6には国が関連付けられていないため、新しいsire_country列の関連フィールドに「6」を入力します。

私が役に立った場合、私が使用しようとしているスクリプトを無駄に追加しました!

#denoting country codes for breed codes 1-80 
breed_country<-c("GBR", "GBR", "GBR", "GBR", "GBR", "6", "GBR", "8", "9", 
"10", 
"11", "GBR", "NZL", "GBR", "GBR", "16", "DNK", "18", "19", "GBR", "21", 
"GBR", 
"23", "24", "25", "26", "CHE", "28", "29", "30", "31", "32", "33", "34", 
"35", 
"36", "37", "38", "39", "40", "41", "42", "CZE", "44", "45", "IRL", "AUS", 
"POL", "DEU", "50", "51", "SWE", "DEU", "ESP", "55", "56", "57", "58", 
"SWE", 
"DEU", "DNK", "NZL", "NLD", "CAN", "USA", "66", "67", "68", "USA", "70", 
"FRA", 
"ITA", "FIN", "JEY", "GGY", "76", "NOR", "78", "79", "80") 

breed_id<-c("Sire.Breed") 

sire_country<-breed_country[breed_id] 

sire_country[is.na("Sire.ID")]<-"" 


#the output looks like 
    sire_country 
[1] NA 


#when I add sire_country to my data frame, I get 


sire_country 
1      <NA> 
2      <NA> 
3      <NA> 
4      <NA> 
5      <NA> 
6      <NA> 
7      <NA> 
8      <NA> 
9      <NA> 
10      <NA> 
11      <NA> 
12      <NA> 
13      <NA> 
14      <NA> 
15      <NA> 

# "Sire.Breed" is a column containing numerical breed codes in the data 
frame: df 
# sire_country is what I want the new column with the country codes in to be 
called 
# if there is no "Sire.ID" present, I want the field to remain blank - I 
have used this function elsewhere and it work fine 

私のデータは、.csvファイルから読み込まれます。残念ながら私はそれを秘密にすることはできません。しかし、架空の例は次のようになります。

animal name breed Mother Father ID    Company DOB 
1  Alice 2  Vera Tom  123456789012 Heinz 12/05/2017 
2  Kate 63  Lucy Jack 123456987147 Google 03/06/2017 

(私は申し訳ありませんが、より良いテーブルをフォーマットすることはできません)

それから私は、品種(この場合は2または63)に関連する国コードを、したいと思いますそのように最後に追加される:

animal name breed Mother Father ID    Company DOB Country 
1  Alice 2  Vera Tom  123456789012 Heinz 12/05/2017 GBR 
2  Kate 63  Lucy Jack 123456987147 Google 03/06/2017 NLD 

謝罪を私は、この全体に間違った言語を使用している場合、私はまだ学んでいます! 私に与えることができれば、非常に感謝します。

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

+0

国コードだけではなく、データも入力してください。 –

+0

実際に列があるデータ構造から始めましょう。私。 'data.frame(code = 1:80、country = breed_country)'です。期待される出力を視覚的に表現してください(手動で作成してください)。そして、80行が過度なものであり、10行がポイントを取得するのに十分である。 –

+0

私はあなたが作成したい 'breed'カラムと新しいカラムの違いを理解するのに苦労しています。あなたの例が 'breed'列と所望の列に関して異なるシナリオを示したら(例えば、' breed'のどのような種類の値が結果colの値にマップされるか) –

答えて

1

ベクトル、行列、データフレームのインデックスを作成するには、さまざまな方法が必要です。あなたがbreed_country要素の順序は、実際にそれに対応する品種によって品種コード1:80、したがって、あなたがすることができます簡単にインデックスbreed_countryに対応気付いたよう

breed_country[2] 
breed_country[c(2, 65, 10, 80)] 

:あなたはの出力を見ることができる運動としてhttp://www.cookbook-r.com/Basics/Indexing_into_a_data_structure/

エクササイズで見られるようなコードです。

df$breed(品種コードに対応するデータフレームの列)を使用して、breed_countryベクターのインデックスを作成します。

あなたはdf$breedはあなたのデータフレームに見られるために、品種コードのベクトルを与えて見ることができるように:あなたは間違っていたのはここ

df$breed # breed codes of df 
breed_country[df$breed] # index breed_country by breed codes in df 
df$Country <- breed_country[df$breed] # assign to new column "Country" 
head(df) # print first 6 rows of df 

は次のとおりです。

breed_id<-c("Sire.Breed") 
breed_country[breed_id] 

これは同等です:

breed_country["Sire.Breed"] 

breed_countryの要素の名前はいずれも"Sire.Breed"なので、出力sire_countryNAです。

さらにis.na("Sire.ID")を使用して、文字ベクトルがNAであるかどうかを確認します。出力されない場合、出力はFALSEです。コードをステップ実行して、各呼び出しの出力を確認する必要があります。

関連する問題