我需要删除列中问号后的所有内容。
我有一个数据集EX:
my.data
BABY MOM LANDING
mark dina www.example.com/?kdvhzkajvkadjf
tom becky www.example.com/?ghkadkho[qeu
brad tina www.example.com/?klsdfngal;j
我希望我的新数据是:
new.data
BABY MOM LANDING
mark dina www.example.com/?
tom becky www.example.com/?
brad tina www.example.com/?
如何告诉R删除?
中的my.data$LANDING
后的所有内容?
答案 0 :(得分:11)
我们可以使用sub
删除?
之后的字符。我们使用正面的lookbehind((?<=\\?).*
)匹配一个或多个前面有.
的字符(?
),并将其替换为''
。
my.data$LANDING <- sub('(?<=\\?).*$', '', my.data$LANDING, perl=TRUE)
my.data
# BABY MOM LANDING
#1 mark dina www.example.com/?
#2 tom becky www.example.com/?
#3 brad tina www.example.com/?
或者另一种选择是使用capture groups
然后用捕获组(\\1
)替换第二个参数。
my.data$LANDING <- sub('([^?]+\\?).*', '\\1', my.data$LANDING)
在这里,我们匹配所有不是?
([^?]+
)后跟?
(\\?
)的字符,并使用括号作为一组进行捕获({{1 }}),我们将其余字符留在组中(([^?]+\\?)
)。
或者在评论中提到的@Frank,我们可以匹配.*
和其他字符(?
),并将其替换为.*
作为第二个参数。< / p>
\\?