2015-08-17 71 views
0

我有這個數據幀調用mydf。如果滿足以下條件,我需要用(零)'0'代替mydf中的NAs:if number,NA;或NA,號碼存在;那麼NA必須爲0,否則每隔一個NA仍保持不變。結果如下所示。用條件替換R中的NA爲零

是myDF

A  B  C 
1,3 1,NA NA,1 
NA,4 0,0 5,NA 
NA NA,NA NA,6 

結果

A  B  C 
    1,3 1,0 0,1 
    0,4 0,0 5,0 
    NA NA,NA 0,6 
+2

那些看上去並不像'NA'但' 「NA」'字符,如字符串。 – SabDeM

+0

@SabDeM這些是我的矩陣中的na,我需要擺脫這些吸盤。 – MAPK

+2

我的猜測是,你可以擺脫他們,而首先創建這些字符串。 –

回答

2

您可以使用正則表達式完成這個任務。

mydf[] <- lapply(mydf, sub, pattern = "NA(?=,[0-9])|(?<=[0-9],)NA", 
       replacement = "0", perl = TRUE) 

mydf 
#  A  B C 
# 1 1,3 1,0 0,1 
# 2 0,4 0,0 5,0 
# 3 NA NA,NA 0,6 

此正則表達式替代以下比賽用0NA跟一個逗號和一個數字,並且在前面的一個數字和一個逗號NA


對於這個解決方案,我認爲mydf結構如下:

mydf <- structure(list(A = c("1,3", "NA,4", "NA"), B = c("1,NA", "0,0", 
"NA,NA"), C = c("NA,1", "5,NA", "NA,6")), .Names = c("A", "B", 
"C"), row.names = c(NA, -3L), class = "data.frame") 
+0

你能否提供一些解釋? – MAPK

+0

@MAPK我改變了代碼並添加了一個解釋。 –

+1

@MAPK正如我所說:他們不是'NA',但字符蜇傷,否則正則表達式將無法正常工作。 – SabDeM