我有一个双列数据框,并希望将其中一个列拆分为两个具有细菌菌株名称的列,另一个列为其中生长的Media。 该数据位于标题为" strain"并且格式为" Speciesname" - " Mediatype"。我想使用一个检测连字符的正则表达式" - "将两个变量分成不同的列。
以下是我迄今为止尝试过的代码:
lysate.long <-
lysate %>%
filter(str_detect(Strain, pattern = "[:alnum:]-[:alnum:]")) %>%
tidyr::extract(Strain,
c("Strain", "Media"),
regex = "([[:alnum:]])-([[:alnum:]]+)",
convert = TRUE)
但是,上面的代码不包括在Strain和Media名称中都存在的句点。例如,菌株命名为大肠杆菌&#34;,&#34; B.Subtilis&#34;等等和媒体被命名为&#34; 0&#34;,&#34; 0.1&#34;,&#34; 0.01&#34;根据稀释。
目前使用的正则表达式仅检测句点之前或之后的字符。如何格式化它以便包含两个字符?
答案 0 :(得分:0)
对于基础R解决方案,gsub
应该有效:
df <- data.frame(x=c("E.coli-agar"))
df$species <- gsub("-.*$", "", df$x)
df$media <- gsub("^.*?-", "", df$x)
df
x species media
1 E.coli-agar E.coli agar
对我的回答一个重要的假设是破折号对于每一条数据只出现一次,而且只出现一次。如果不是这种情况,我需要添加额外的逻辑。