将grep与if else语句结合使用

时间:2018-06-06 17:44:11

标签: r

我有数据框“数据”。我使用grep函数搜索了一个模式,我想将结果放回数据框中以匹配其他行。

data$CleanDim<-data$RAW_MATERIAL_DIMENSION[grep("^BAC",data$RAW_MATERIAL_DIMENSION)]

我想将结果粘贴到新列data$CleanDim但我收到以下错误....有人可以帮助我吗?

Error in `$<-.data.frame`(`*tmp*`, CleanDim, value = c(1393L, 1405L, 734L,  :  replacement has 2035 rows, data has 1881

1 个答案:

答案 0 :(得分:0)

AdjustWindowRectEx返回符合给定条件的条目索引向量。

您的代码在此处工作的唯一方法是,grep()的行数是否等于data找到的匹配数的偶数倍。

考虑以下可重现的例子:

grep()

注意:如果原始data = data.frame(RAW_MATERIAL_DIMENSION = c("BAC","bBAC","aBAC","BACK","lbd")) > data RAW_MATERIAL_DIMENSION 1 BAC 2 bBAC 3 aBAC 4 BACK 5 lbd > grep("^BAC",data$RAW_MATERIAL_DIMENSION) [1] 1 4 data$CleanDim <- data$RAW_MATERIAL_DIMENSION[grep("^BAC",data$RAW_MATERIAL_DIMENSION)] Error in `$<-.data.frame`(`*tmp*`, CleanDim, value = 1:2) : replacement has 2 rows, data has 5 对象只有前四行,这可能会很好(尽管它会很奇怪)。在这种情况下,您只需在新列中填充重复值。

但是,你想要做的是查看data的结果,并考虑在你的背景下哪些是明智的。只有当此结果的长度等于grep("^BAC",data$RAW_MATERIAL_DIMENSION)对象的长度时,或者至少如果您的数据对象是该长度的整数倍,您的操作才会起作用。