【发布时间】:2017-12-01 18:39:24
【问题描述】:
我有一个带有字符串的数据框。我想查找是否在每个元素中找到了部分字符串。作为输出,我想要一个数据框(最终相同),其中我对未找到部分字符串的每个元素都有 NA,以及在找到时实际的部分字符串(仅!)。
此外,我有不止一个部分字符串...而且我知道其中 2 个部分字符串永远不会在同一个元素中!
我最接近它的是:
for(i in 1:length(partial_strings)){
z <- apply(y,2,function(k)str_replace(k,partial_strings[i], partial_strings[i]))
}
z <- ifelse(z %in% partial_strings,z,NA)
但不幸的是,str_replace 不是只返回部分字符串,而是返回原始元素。我可以理解为什么,但是我尝试了其他方法,这些方法只会使输出远离我想要的。
提前致谢
【问题讨论】:
-
请提供样本数据集。您通常可以使用
grepl命令执行此操作。 unit-case 语句类似于df$column[!grepl('partial string', df$column)] = NA -
如果我理解正确,你有一个字符向量,就像:
StringVector <- c("Week39","Week40","Wk41","number50","nbr51","Wk44")假设你想从上述向量中识别的部分字符串或模式是“周”以及“周”;patterns <- c("Week","Wk") grepl(paste(patterns, collapse="|"), StringVector);取决于您的部分字符串是什么,您可以像上面那样在 apply 函数中设计 ifelse()。