2015-06-19 75 views
1

我有一個包含一些數值,以及一些信件數據, 因此,我有如何更改變量的級別是一個因素?

j = c(5 , 6, 7, 6, 7,12 , missing , 6 ,7 8, missing , n/a, n/a, 5, 6) 

我知道這是保存爲水平的數量的一個因素。我想將n/a更改爲零,因爲這是它的數值,但我不知道該怎麼做。我使用了簡單的命令,但它不會讓我,數據比我給出的大,所以不能手動完成。

任何幫助真的很感激。

+3

不知道你想要什麼'水平(j)[levels(j)=='n/a'] < - 0' – akrun

回答

3

的疑難雜症」與因素是一個值,以在該載體的位置的該分配要求值是在的水平因子屬性。您可以使用levels<-功能在'水平'中增加可接受的值。

> j = factor(c(5 , 6, 7, 6, 7,12 , 'missing' , 6 ,7, 8, 'missing' , 'n/a', 'n/a', 5, 6) 
# Notice that I corrected your code since you didn't enclose the character values in quotes 
# ,,,, and seemed to be missing a comma 
> levels(j) <- c(levels(j), 0) # append to levels; keep initial order. 
> j[j=='n/a'] <- 0 
> j 
[1] 5  6  7  6  7  12  missing 6  
[9] 7  8  missing 0  0  5  6  
Levels: 12 5 6 7 8 missing n/a 0 

這個確切的語法就並不適用於那些你有REAL R NA的,而不是‘N/A的情況’,因爲從來都沒有==的一個NA

再次看到這一點,我意識到我沒有看到@ akrun的建議簡單地使用level<-修改levels屬性「in place」的美麗和簡單性。

levels(j)[levels(j)=='n/a'] <- 0 

他的建議的,其具有不增加電平的數量的可能合乎需要的特徵的邏輯是,在載體中的整數值保持不變,但一個只需要對屬性內修改它們的標籤。我承認經常被R中的因素絆倒,我顯然還在努力的一個個人失敗。

+0

謝謝你,正是我在找的東西。 – khoshnaw

0

不知道太多,但怎麼樣,即使以後你要轉換爲數字和嘗試做其他代碼那些"missing"因爲你可以在這裏看到,所有被脅迫性質蜇傷:

j <- as.factor(c(5, 6, 7, 6, 7, 12, "missing", 6 , 7, 8, "missing" , "n/a", "n/a", 5, 6)) 

gsub("n/a", 0, j) 
[1] "5"  "6"  "7"  "6"  "7"  "12"  "missing" "6"  
[9] "7"  "8"  "missing" "0"  "0"  "5"  "6"  
-1

j矢量還是數據框中的變量?

如果j是在數據幀中可變你只需要:

df[is.na(df$j)] <- 0   # change all NAs to zero 
df[df$j == "missing"] <- 0 # for strings (character values) 
相關問題