假设数据框df的品种来源列为varieties,可以使用以下代码提取指定字符:

library(stringr)

df$亲本 <- str_extract_all(df$varieties, "[A-Za-z]+[-x]?\\d+[-\\d]*") %>%
  lapply(function(x) paste(x, collapse = ", ")) %>%
  unlist()

解释一下代码:

  • str_extract_all(df$varieties, "[A-Za-z]+[-x]?\\d+[-\\d]*"):使用str_extract_all()函数从品种来源列中提取所有符合要求的指定字符。正则表达式[A-Za-z]+[-x]?\\d+[-\\d]*表示匹配至少一个英文字母(无论大小写),可能含有一个-或x,后面跟至少一个数字,后面可能还有连续的数字和-。例如:A3-5-7Bx1-3-5-7c2-4-6-8都符合要求。

  • %>% lapply(function(x) paste(x, collapse = ", ")):使用管道符将提取结果传给lapply()函数,将每个元素(即每个品种来源)中的指定字符以逗号隔开。

  • %>% unlist():使用管道符将结果展开成一个长度与数据框df的行数相同的向量,并将其赋值给新列亲本

数据框df含有品种来源列文本类型利用R的stringr包提取该列的所有指定字符指定字符为数字个数未知且前面为英文字母无论大小写个数未知字母与数字之间可能含有-或者x且数字之间可能含有-将结果添加到新列新列名称为亲本若含有多个指定字符以顿号隔开

原文地址: http://www.cveoy.top/t/topic/b5my 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录