2017-10-16 6 views
-2

여러분 중 한 분이 저를 도울 수 있기를 바랍니다. 저는이 작업을 여러 가지 방법으로 시도해 왔으며 올바른 대답을 찾지 못하는 것 같습니다. 저는 R에 상당히 익숙하지만 제가 가지고있는 데이터를 포맷팅하는 스크립트를 작성했습니다. 궁극적으로 데이터가 들어올 때마다이 스크립트를 매주 실행하고 싶습니다.해당 숫자/문자를 참조하는 데이터 프레임에 열을 추가하십시오.

많은 3 개국 (예 : GBR 또는 NLD 등). 내가 원하는 것은 품종 코드에 해당하는 국가 코드가있는 데이터에 새 열을 만드는 것입니다.

내가 겪고있는 문제 중 하나는 모든 숫자 (1 - 80)에 해당 국가 코드가있는 것은 아닙니다. 그래서 같은 유형이 아니기 때문에 벡터를 모두 만들 수는 없습니다.

관련 국가 코드가없는 경우 국가 코드를 번식 코드의 번호로 사용하고 싶습니다. 예를 들어, 번식 ​​코드 6에는 연관된 국가가 없으므로 새 sire_country 열에서 관련 필드를 채우려면 "6"을 입력하십시오.

도움이 될만한 경우 사용하려는 스크립트를 아무 쓸모없이 추가했습니다!

# "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 파일에서 읽어

#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> 

. 불행히도 기밀이므로 게시 할 수 없습니다. 그러나 가상의 예는 다음과 같습니다

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) 품종에 관한 국가 코드를 원하는 것 (I 테이블 더 미안를 포맷 할 수 없습니다) 끝 부분에 다음과 같이 덧붙여 야합니다.

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' 열과 새로 만들려는 열의 차이를 이해하는 데 어려움을 겪고 있습니다. 예를 들어 '품종'열과 원하는 열과 관련하여 여러 시나리오를 보여 주면 도움이 될 것입니다 (예 : '품종'의 어떤 종류의 값이 결과 열의 가치에 매핑되는지). –

답변

1

벡터, 행렬 및 데이터 프레임을 다른 방법으로 색인해야합니다. 당신의 출력을 볼 수있는 연습으로

http://www.cookbook-r.com/Basics/Indexing_into_a_data_structure/ : 당신이 breed_country 요소의 순서가 실제로 품종 코드 1:80에 해당하는주의로서

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

을 따라서 할 수 있습니다 해당 품종 쉽게 인덱스 breed_country 코드를 연습 문제에서 볼 수 있습니다.

이제 번식 코드에 해당하는 데이터 프레임의 열인 df$breed을 사용하여 breed_country 벡터를 인덱싱합니다.

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

이 동일합니다 : 당신이 잘못된 곳

다음
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 

은 다음과 같습니다

당신이 df$breed을 볼 수있는 바와 같이 데이터 프레임에서 볼 수있는 순서로 당신에게 품종 코드 벡터를 제공합니다 :

breed_country["Sire.Breed"] 

아직 breed_country 요소 중 어느 것도 이름이 "Sire.Breed"이므로 출력 sire_countryNA입니다.

그런 다음 문자 벡터가 NA인지 묻는 is.na("Sire.ID")을 사용합니다. 그렇지 않은 경우 출력은 FALSE입니다. 코드를 단계별로 실행하고 각 호출의 출력을 확인해야합니다.