2017-10-05 101 views
3

字符串从表中的行,我想使用存储在向量中的弦从表中删除行:删除基于在

> dput(vec_temp) 
c("HL", "LL", "ML") 

表看起来像这样:

structure(list(Accession = "AT1G71220", variable = structure(14L, .Label = c("f:HL-f:FL", 
"f:LL-f:FL", "f:ML-f:FL", "f:LL-f:HL", "f:ML-f:LL", "f:ML-f:HL", 
"m:HL-m:FL", "m:LL-m:FL", "m:ML-m:FL", "m:LL-m:HL", "m:ML-m:HL", 
"m:ML-m:LL", "ntrc:HL-ntrc:FL", "ntrc:LL-ntrc:FL", "ntrc:ML-ntrc:FL", 
"ntrc:LL-ntrc:HL", "ntrc:ML-ntrc:HL", "ntrc:ML-ntrc:LL", "WT:HL-WT:FL", 
"WT:LL-WT:FL", "WT:ML-WT:FL", "WT:LL-WT:HL", "WT:ML-WT:HL", "WT:ML-WT:LL" 
), class = "factor"), value = 0.0445054204080209), .Names = c("Accession", 
"variable", "value"), row.names = 2167L, class = "data.frame", na.action = structure(c(1L, 
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 15L, 16L, 
17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L), .Names = c("35", "199", 
"363", "527", "691", "855", "1019", "1183", "1347", "1511", "1675", 
"1839", "2003", "2331", "2495", "2659", "2823", "2987", "3151", 
"3315", "3479", "3643", "3807"), class = "omit")) 

请关注在名为variable的列上。该表格包含一行variable - >ntrc:LL-ntrc:FL。从这个线程的开头看矢量,我们可以看到FL不在那里。因此,我想删除该行(通常是整个表格)。我想问R将向量中的字符串与存储在名为variable的列中的字符串进行比较,这些列出现在:之后。如果在向量中找不到表中的字符串,则应删除整行(或表)。

+0

所以既'LL'和“FL”应该在向量中以便不被删除? – Sotos

+0

他们应该在那个向量中。顺序无关紧要。正如你看到'FL'不在那里。 – tralala

+0

您只显示了单个行数据集。请包括更多行 – akrun

回答

2

的思想是分裂variable列并使用grepl以识别在向量后缀是否出现在字符串两者倍(因此== 2)中,即

vec_temp <- c("HL", "LL", "ML") 

i1 <- colSums(sapply(strsplit(as.character(df$variable), '-', fixed = TRUE), function(i) 
           grepl(paste(vec_temp, collapse = '|'), i))) == 2 

df[i1,] 
+0

这听起来几乎是我想要实现的。是否可以使用矢量“vec_temp”而不是粘贴特定的字符串?该函数将应用于循环中,因此字符串可能因行而异。此外,我想知道它是否适用于具有更多行数的表,因为它应该询问字符串是否出现在表中的每个特定行中。 – tralala

+0

它将与多行工作是的。也有临时vec在那里 – Sotos