2017-10-16 27 views
-2

我希望你们其中一位能帮助我 - 我一直在尝试加载不同的方法来做到这一点,似乎无法找到正确的答案。 我对R相当陌生,但一直在编写脚本来格式化一些我拥有的数据。 最终,我会希望每周运行这个脚本作为数据进来。添加一列到引用相应数字/字符的数据框

我有一个品种代码列表(1 - 80)其中许多(但不是全部)的许多(但不是全部)有一个相应的3个字符的国家(如。 GBR或NLD等)。 我想要做的是在我的数据中创建一个新的colum,其中包含国家代码,对应于品种代码。

我遇到的一个问题是,并非所有的数字(1-80)都有相应的国家代码。 所以我不能创建一个载体,因为它们不是同一类型。

如果没有关联的国家代码,我希望国家代码是品种代码的数量。 例如,品种代码6没有关联的国家,所以我想要“6”填充我的新sire_country列中的相关字段。

万一它有帮助,我已经添加了我一直在尝试使用的脚本,无济于事!

#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

我很努力去理解你想创建的“品种”列和新列的区别。如果您的示例显示了关于“品种”列和期望列的不同场景(例如,“品种”的什么样的值映射到结果列的哪个值),那将会很有帮助。 –

回答

1

你应该学习不同的方法来索引向量,矩阵和数据帧,例如, http://www.cookbook-r.com/Basics/Indexing_into_a_data_structure/

作为练习可以看到的输出:

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

如你注意到breed_country元素的顺序实际上对应于该品种码1:80,因此,可以通过其相应的品种容易索引breed_country代码如练习中所见。

现在您将使用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。您应该逐步浏览您的代码并查看每个调用的输出。

相关问题