将条件中的N替换为零

时间:2015-08-17 08:30:04

标签: r string dataframe

我有一个名为mydf的数据框。如果满足以下条件,我需要将mydf中的NAs替换为(0)'0':if number,NA;或NA,号码存在;那么NA必须是0否则其他所有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

1 个答案:

答案 0 :(得分: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")