将与字符串列表不匹配的单元格替换为 NA 仅适用于 R 中的某些列
Replace cells not matched a list of string to NA for only for certain cols in R
我有一个包含多个列的数据框"abnormal2",我以剪切一些列为例;
id class1 class2 class3 class4 class5
1 1 PATH PATH PATH PATH PATH
2 2 rLS PATH LB <NA>
3 3 PATH PATH PATH <NA> <NA>
4 4 PATH VUS VUS <NA> <NA>
5 5 PATH VUS VUS <NA> <NA>
6 6 PATH PATH VUS PATH <NA>
7 7 MPATH VUS VUS <NA> <NA>
8 8 VUS VUS VUS <NA> <NA>
9 9 PATH VUS VUS <NA> <NA>
10 10 PATH PATH <NA> <NA>
我想要的是将与字符串列表 (MPATH,VUS_LPATH,VUS_LB,PATH,VUS,LB,Normal) 不匹配的任何单元格替换为 NA。这是仅针对从 class1 到 class5 的列的替换;
结果可能是这样的:
id class1 class2 class3 class4 class5
1 1 PATH PATH PATH PATH PATH
2 2 NA NA PATH LB <NA>
3 3 PATH PATH PATH <NA> <NA>
4 4 PATH VUS VUS <NA> <NA>
5 5 PATH VUS VUS <NA> <NA>
6 6 PATH PATH VUS PATH <NA>
7 7 MPATH VUS VUS <NA> <NA>
8 8 VUS VUS VUS <NA> <NA>
9 9 PATH VUS VUS <NA> <NA>
10 10 PATH PATH NA <NA> <NA>
我使用了下面的代码,但它不起作用:
sel <- grepl("class",names(abnormal2))
abnormal2[sel] <- data.frame(lapply(abnormal2[sel], function(x) gsub([^MPATH|^VUS\_LPATH|^VUS\_LB|^PATH|^VUS|^LB|^Normal]","", x)))
如果您的字符串匹配是准确的(而不是要求正则表达式),那么以您的想法为基础,下面的方法将起作用。
sel <- grepl("class",names(abnormal2))
matches <- c("MPATH", "VUS_LPATH", "VUS_LB", "PATH", "VUS", "LB", "Normal")
abnormal2[sel] <- data.frame(lapply(abnormal2[sel], function(x) {
x[!x %in% matches] <- NA
x
}), stringsAsFactors = F)
我有一个包含多个列的数据框"abnormal2",我以剪切一些列为例;
id class1 class2 class3 class4 class5
1 1 PATH PATH PATH PATH PATH
2 2 rLS PATH LB <NA>
3 3 PATH PATH PATH <NA> <NA>
4 4 PATH VUS VUS <NA> <NA>
5 5 PATH VUS VUS <NA> <NA>
6 6 PATH PATH VUS PATH <NA>
7 7 MPATH VUS VUS <NA> <NA>
8 8 VUS VUS VUS <NA> <NA>
9 9 PATH VUS VUS <NA> <NA>
10 10 PATH PATH <NA> <NA>
我想要的是将与字符串列表 (MPATH,VUS_LPATH,VUS_LB,PATH,VUS,LB,Normal) 不匹配的任何单元格替换为 NA。这是仅针对从 class1 到 class5 的列的替换; 结果可能是这样的:
id class1 class2 class3 class4 class5
1 1 PATH PATH PATH PATH PATH
2 2 NA NA PATH LB <NA>
3 3 PATH PATH PATH <NA> <NA>
4 4 PATH VUS VUS <NA> <NA>
5 5 PATH VUS VUS <NA> <NA>
6 6 PATH PATH VUS PATH <NA>
7 7 MPATH VUS VUS <NA> <NA>
8 8 VUS VUS VUS <NA> <NA>
9 9 PATH VUS VUS <NA> <NA>
10 10 PATH PATH NA <NA> <NA>
我使用了下面的代码,但它不起作用:
sel <- grepl("class",names(abnormal2))
abnormal2[sel] <- data.frame(lapply(abnormal2[sel], function(x) gsub([^MPATH|^VUS\_LPATH|^VUS\_LB|^PATH|^VUS|^LB|^Normal]","", x)))
如果您的字符串匹配是准确的(而不是要求正则表达式),那么以您的想法为基础,下面的方法将起作用。
sel <- grepl("class",names(abnormal2))
matches <- c("MPATH", "VUS_LPATH", "VUS_LB", "PATH", "VUS", "LB", "Normal")
abnormal2[sel] <- data.frame(lapply(abnormal2[sel], function(x) {
x[!x %in% matches] <- NA
x
}), stringsAsFactors = F)