我想从data.frame中删除一些行。让我们从示例开始:
> tbl_EOD[20:40,]
AGI.identifier location_subacon
20 AT1G11360.4 plastid
21 AT1G11650.2 nucleus
22 AT1G11930.2 cytosol
23 AT1G12010.1 peroxisome
24 AT1G12080.2 nucleus
25 AT1G12140.1 plasma membrane
26 AT1G12250.2 cytosol,nucleus ## row which I want to delete
27 AT1G12520.2 peroxisome
28 AT1G13320.2 cytosol
29 AT1G13930.3 nucleus
30 AT1G14250.1 extracellular,plasma membrane ## row which I want to delete
31 AT1G15340.2 nucleus
32 AT1G15470.1 cytosol
33 AT1G16460.4 cytosol
34 AT1G16820.2 cytosol,mitochondrion ## row which I want to delete
35 AT1G17150.1 extracellular
36 AT1G17330.1 cytosol
37 AT1G17470.2 cytosol
38 AT1G17890.3 cytosol
39 AT1G19730.1 cytosol
40 AT1G20060.1 nucleus
正如我在示例中所示,我只想删除那些具有两个由逗号分隔的本地化的行。
答案 0 :(得分:3)
您可以使用grepl
。
tbl_EOD <- tbl_EOD[!grepl(",", tbl_EOD$location_subacon), ]
说明:grepl
搜索字符向量,将其称为S
,以获取模式。如果TRUE
的对应元素包含模式,则返回与S
相同长度的向量,否则返回FALSE
。在这种情况下,模式为","
。你真正想要的是那些没有逗号的行,所以你可以使用“!”在grepl
前面,将TRUE
的所有值转换为FALSE
,反之亦然。
如果您要保留所有行,但删除逗号后的所有内容,则可以使用gsub
。
tbl_EOD$location_subacon <- gsub("(.*),.*", "\\1", tbl_EOD$location_subacon)
说明:gsub
在字符向量S
中搜索模式,并用替换替换该模式的每次出现。在这种情况下,模式为"(.*),.*"
,替换为"\\1"
。该模式是一个正则表达式,类似于"(zero or more characters) followed by a comma followed by zero or more characters"
。这里,括号捕获封闭的部分,以便您以后可以参考它。在这种情况下,替换只是捕获的部分,它由\\1
表示。