我有一个名为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
答案 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
此正则表达式将以下匹配项替换为0
:NA
后跟逗号和数字,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")