2013-07-03 28 views
0

我對我認爲很容易工作的東西感到困惑。 我有一個數據框與年份,城市和物種的列。在數據框中複製unique()字符串向量的結果R

  species  City Year 
80  Landpattedyr Sisimiut 2007 
83  Landpattedyr Sisimiut 2008 
87  Landpattedyr Sisimiut 2009 
721733 Havpattedyr Upernavik 2010 
721734 Havpattedyr Upernavik 2011 
721735 Havpattedyr Upernavik 2007 

我已經使用獨特的功能如下

years<-unique(df$year) 
city<-unique(df$City) 
species<-unique(df$species) 

現在我需要分配在每個這些矢量基於索引的數據幀的行的一個值,例如

hunting[1,]$year<-year[i] 
hunting[1,]$group<-species[j] 
hunting[1,]$city<-city[k] 

問題是隻有一年被正確複製,而城市和狩獵df中的物種顯示爲數字。我無法弄清楚爲什麼會發生這種情況。任何人都可以幫忙嗎?

year group city lat long total 
1 2007  6 19 66.93 -53.66 4563 
NA 2007  6 20 72.78 -56.15 91 
3 2007  6 8 67.01 -50.72 388 
4 2007  6 21 70.66 -52.12 280 
5 2007  6 14 77.47 -69.23 469 
6 2007  6 5 69.22 -51.10 1114 
+2

可能是因爲這兩個變量是因素。先將它們轉換爲字符。 – joran

+4

要轉換爲char,您可以使用:city < - unique(as.character(df $ City))',或者簡單地這樣:'city < - levels(df $ City)'(最後一個只能*與因素)。 –

+0

@ Ferdinand.kraft謝謝你們,你們是炸彈!如果你輸入答案,我可以接受它。我如何知道df中的列是否是因子或字符? –

回答

1

要了解一列是因子或字符,你可以使用這個is.factor(df$City)is.character(df$City)

factor列,第(唯一)的水平被存儲在levels屬性的情況下,其可與

levels(df$City) 

注來訪問:這可能包括不存在於載體中的水平,例如,如果某些行已被刪除或者某些級別已被添加。

要檢索factorcharacter載體的獨特的元素,您可以使用此:

as.character(unique(df$City)) 

這將回報水平不存在的因素列。

注意:最後一條命令比unique(as.character(df$City))略高效,因爲轉換是在可能較短的向量上進行評估的。

相關問題