使用特定字符串子行设置行

时间:2015-02-19 08:58:21

标签: r grep subset

以下是3行非常大的数据集(数据框名为a):

1   [~http-bio-26600-exec-98] - Update_Listing_API SellerID
2   [~http-bio-26600-exec-10] - Update_Listing_API SellerID
3   [~http-bio-26600-exec-40] - Update_Listing SellerID

我希望通过这样的子集来获取包含字符串"Update_Listing_API"的行。我尝试使用grep函数:

a$v1 <- grep("Update_Listing_API", a$V1, invert = TRUE)

但它给我的错误是:

Error in `$<-.data.frame`(`*tmp*`, "V1", value = c(3L, 5L, 6L, 7L, 8L,  : 
  replacement has 637156 rows, data has 712410

有人可以指出这里的错误吗?我是R的新手,不知道自己做错了什么。提前谢谢。

3 个答案:

答案 0 :(得分:1)

这是否实现了目标? (我不确定你是否想要invert

    a <- a[grep("Update_Listing_API", a$V1, invert = TRUE),]

答案 1 :(得分:0)

我创建了一个示例数据框来重现您的问题:

#example data
data <- data.frame(x1=c("hallo_andi","hello_andi","hello_max","hallo_max"),x2=c("de","en","en","de"))

> data
          x1 x2
1 hallo_andi de
2 hello_andi en
3  hello_max en
4  hallo_max de

#subset with specific string

subset(data, grepl("hallo", data[[1]]), drop = TRUE)

          x1 x2
1 hallo_andi de
4  hallo_max de

这是否代表您的问题?

在您的情况下,您可以使用:

subset(a, grepl("Update_Listing_API", a[[1]]), drop=TRUE)

答案 2 :(得分:0)

我将假设您的数据如下所示,即一列数据框:

                                                      V1
1  [~http-bio-26600-exec-98] - Update_Listing_API SellerID
2  [~http-bio-26600-exec-10] - Update_Listing_API SellerID
3  [~http-bio-26600-exec-40] - Update_Listing SellerID

您的命令grep("Update_Listing_API", a$V1, invert = TRUE)打印出与“Update_Listing_API”不匹配的索引,因为几分钟前已经注意到的invert=TRUE参数为Rick。

你想要的是grep("Update_Listing_API", a$V1, invert = FALSE)。您收到的错误消息告诉您,您试图在较长的原始数据框中放置较短的向量(带有子集索引)。