我有一个数据帧A,它包含2列-字符串和代码:
String Code
Bacteria.111 abc1
Bacteria.111 abc2
Bacteria.111 abc3
Archaea.153 gmt1
Archaea.153 gmt2我有另一个数据帧B,它包含上面细菌/古生菌后面的数字应该是什么代码的列表:
Number Code
111 abc2
153 gmt1我正在尝试做的是从数据帧A中删除在细菌/古生菌之后具有错误的数字代码的行。因此,例如,由此产生的数据帧应为:
String Code
Bacteria.111 abc2
Archaea.153 gmt1我尝试过在%中使用%,但这里使用的是精确匹配,所以没有匹配。我所需要的就是匹配一个数字,这个数字总是在字符串的末尾,并且总是跟在一个句点后面。我对如何实现这一点感到迷惑。
发布于 2020-09-08 19:12:00
您可以在粘贴列时使用%in%,并使用sub删除.之前的所有内容。
A[paste(sub(".*\\.", "", A$String), A$Code) %in% paste(B$Number, B$Code),]
# String Code
#2 Bacteria.111 abc2
#4 Archaea.153 gmt1发布于 2020-09-08 19:19:45
试试这个:
A <- A %>%
mutate(
Number = as.integer(stringr::str_sub(String, start = stringi::stri_locate_last_fixed(String, ".")[,2] + 1)) # get the code
) %>%
left_join(B %>% rename(Code2 = Code), by = "Number") %>% # join data frames
filter(Code == Code2) %>% # compare and filter
select(-Number, -Code2)https://stackoverflow.com/questions/63792617
复制相似问题