根据两种不同的条件拆分一列字符串(具有不同的模式)
Split a column of strings (with different patterns) based on two different conditions
希望得到一些帮助来解决这个问题。所以我有一列包含两种类型的字符串,我需要使用 2 种不同的条件将字符串拆分为多个列。我可以弄清楚如何单独拆分它们,但很难在我的代码中添加 IF 语句。这是下面的示例数据集:
data = data.frame(string=c("HFUFN-087836_661", "207465-125 - IK_6 Mar 2009.docx_37484956"))
对于第一类变量(带_)。我想拆分后_。所以我为此使用了以下代码
strsplit(data$string, "-")
对于其中 have.docx 的变量,我想在 docx 之后拆分。我不能根据“_”进行拆分,因为它在此字符串中多次出现。所以我使用了以下代码:
strsplit(data$string, "x_")
我的问题是这两种类型的字符串出现在同一列中。有没有办法告诉 R 如果“docx”在字符串中然后在 x_ 之后拆分,但如果它没有在 _ 上拆分?
任何帮助将不胜感激 - 谢谢你们!
这是一个tidyr
解决方案:
library(tidyr)
data %>%
extract(string,
into = c("1","2"), # choose your own column labels
"(.*?)_([^_]+)$")
1 2
1 HFUFN-087836 661
2 207465-125 - IK_6 Mar 2009.docx 37484956
正则表达式的工作原理:
正则表达式将字符串分成两个“捕获组”加上中间的下划线:
(.*?)
:第一个捕获组,匹配任意字符(.
)零次或多次(*
)非贪婪(?
)
_
:文字下划线
([^_]+)$
:第二个捕获组,匹配任何不是下划线([^_]
)的字符一次或多次(+
) 在字符串的最后 ($
)
数据:
data = data.frame(string=c("HFUFN-087836_661", "207465-125 - IK_6 Mar 2009.docx_37484956"))
希望得到一些帮助来解决这个问题。所以我有一列包含两种类型的字符串,我需要使用 2 种不同的条件将字符串拆分为多个列。我可以弄清楚如何单独拆分它们,但很难在我的代码中添加 IF 语句。这是下面的示例数据集:
data = data.frame(string=c("HFUFN-087836_661", "207465-125 - IK_6 Mar 2009.docx_37484956"))
对于第一类变量(带_)。我想拆分后_。所以我为此使用了以下代码
strsplit(data$string, "-")
对于其中 have.docx 的变量,我想在 docx 之后拆分。我不能根据“_”进行拆分,因为它在此字符串中多次出现。所以我使用了以下代码:
strsplit(data$string, "x_")
我的问题是这两种类型的字符串出现在同一列中。有没有办法告诉 R 如果“docx”在字符串中然后在 x_ 之后拆分,但如果它没有在 _ 上拆分?
任何帮助将不胜感激 - 谢谢你们!
这是一个tidyr
解决方案:
library(tidyr)
data %>%
extract(string,
into = c("1","2"), # choose your own column labels
"(.*?)_([^_]+)$")
1 2
1 HFUFN-087836 661
2 207465-125 - IK_6 Mar 2009.docx 37484956
正则表达式的工作原理:
正则表达式将字符串分成两个“捕获组”加上中间的下划线:
(.*?)
:第一个捕获组,匹配任意字符(.
)零次或多次(*
)非贪婪(?
)_
:文字下划线([^_]+)$
:第二个捕获组,匹配任何不是下划线([^_]
)的字符一次或多次(+
) 在字符串的最后 ($
)
数据:
data = data.frame(string=c("HFUFN-087836_661", "207465-125 - IK_6 Mar 2009.docx_37484956"))