我有一个像下面这样的向量:
vector
jdjss-jdhs--abc-bec-ndj
kdjska-kvjd-jfj-nej-ndjk
eknd-nend-neekd-nemd-nemdkd-nedke
如何根据 -
分隔符提取最后 3 个值,以便我的结果如下所示:
vector Col1 Col2 Col3
jdjss-jdhs--abc-bec-ndj abc bec ndj
kdjska-kvjd-jfj-nej-ndjk jfj nej ndjk
eknd-nend-neekd-nemd-nemdkd-nedke nemd nemdkd nedke
我曾尝试使用 sub 和 qdap 包,但没有成功。
sub( "(^[^-]+[-][^-]+)(.+$)", "\\2", df$vector)
qdap::char2end(df$vector, "-", 3)
不知道该怎么做。
最佳答案
您可以使用 tidyr::extract
:
library(tidyr)
vector <- c("jdjss-jdhs--abc-bec-ndj", "kdjska-kvjd-jfj-nej-ndjk", "eknd-nend-neekd-nemd-nemdkd-nedke")
df <- data.frame(vector)
tidyr::extract(df, vector, into = c("Col1", "Col2", "Col3"), "([^-]*)-([^-]*)-([^-]*)$", remove=FALSE)
vector Col1 Col2 Col3
1 jdjss-jdhs--abc-bec-ndj abc bec ndj
2 kdjska-kvjd-jfj-nej-ndjk jfj nej ndjk
3 eknd-nend-neekd-nemd-nemdkd-nedke nemd nemdkd nedke
([^-]*)-([^-]*)-([^-]*)$
模式匹配:
([^-]*)
- 第 1 组 ('Col1'
):-
以外的 0+ 个字符
-
- 连字符([^-]*)
- 第 2 组 ('Col2'
):除-
之外的 0+ 个字符
-
- 连字符([^-]*)
- 第 3 组 ('Col3'
):除-
之外的 0+ 个字符
$
- 字符串结尾
设置 remove=FALSE
以保留原始列。
关于r - 根据最后 n 个字符提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54138533/