2013-08-20 37 views
1

我正在嘗試重新編碼,並且遇到似乎夠簡單的障礙,但是在一段時間詢問互聯網後我一直無法弄清楚,所以我感謝你可以給予的任何幫助。在樂譜中指定「NA不允許在下標任務中」

我有一些包含NA的數據。我想重新編碼,使用這些數據,但不斷遇到錯誤「NAs不允許在下標分配中」。正如我試圖創建一個示例數據集,我還遇到了一個警告,我沒有「有意義的因素」。任何幫助,將不勝感激。我的人造數據有三個變量:「var1」和「var2」(字符,有時缺少)和「var3」(數字)。我想要創建第四個變量,如果beta大於零,則包含「var1」的值,如果beta小於零,則包含「var2」的值。如果VAR1或VAR2丟失,我想也缺少新的變量:

var1<-c("A","T",NA,"G","C") 
var2<-c("G","A",NA,"A","G") 
var3 <-c(-.1,3,-4,5,-3) 
df=as.data.frame(cbind(var1,var2,var3)) 

df$newVar[df$var3>0]=df$var1[df$var3>0] 
df$newVar[df$var3<0]=df$var2[df$var3<0] 

我得到的是一串紅:

df$newVar[df$var3>0]=df$var1[df$var3>0] 
Error in df$newVar[df$var3 > 0] = df$var1[df$var3 > 0] : 
NAs are not allowed in subscripted assignments 
In addition: Warning messages: 
1: In Ops.factor(df$var3, 0) : > not meaningful for factors 
2: In Ops.factor(df$var3, 0) : > not meaningful for factors 
df$newVar[df$var3<0]=df$var2[df$var3<0] 
Error in df$newVar[df$var3 < 0] = df$var2[df$var3 < 0] : 
NAs are not allowed in subscripted assignments 
In addition: Warning messages: 
1: In Ops.factor(df$var3, 0) : < not meaningful for factors 
2: In Ops.factor(df$var3, 0) : < not meaningful for factors 

任何意見,將不勝感激。謝謝。

+0

你想重新編碼什麼?顯示所需的輸出可能會有所幫助。 –

+0

您是否嘗試過使用'ifelse'語句? –

+0

可能重複的[在R中的多個數據幀重新編碼](http://stackoverflow.com/questions/18323236/recoding-over-multiple-data-frames-in-r) – Metrics

回答

4

您的問題是您在data.frame之前使用cbind,這會將您的三個變量強制轉換爲相同的類(必須是字符),從而導致它們在製作data.frame時被強制分解。

相反,只是做

df <- data.frame(var1, var2, var3) 

運行相同的代碼爲newVar,你應該得到:

var1 var2 var3 newVar 
1 A G -0.1  2 
2 T A 3.0  4 
3 <NA> <NA> -4.0  NA 
4 G A 5.0  3 
5 C G -3.0  2 
+0

+1。剛剛發佈了相同的答案... – A5C1D2H2I1M1N2O1R2T1

+0

+1我在寫這篇文章時寫道。但我會主張一個更簡單/更有效的子集方法。 –

1

您可以大大簡化你如何重新編碼的變量。不要使用cbind,正如在其他地方已經指出的那樣,但是...您可以提供一個2列的下標變量矩陣來按照您的數據框進行分類。所以我們可以這樣做:

df <- data.frame(var1 , var2 , var3) 

# Gives 1 if 'var3' is greater than 0 and 2 otherwise (the numbers of the columns you want!) 
ind <- (! df$var3 > 0) + 1 
#[1] 2 1 2 1 2 

# Get each row selecting either column 1 or two 
df$newVar <- df[ cbind(1:nrow(df) , ind) ] 
# var1 var2 var3 newVar 
#1 A G -0.1  G 
#2 T A 3.0  T 
#3 <NA> <NA> -4.0 <NA> 
#4 G A 5.0  G 
#5 C G -3.0  G 
相關問題