删除R中列中字符后的所有内容
Removing everything after a character in a column in R
我需要删除列中问号后的所有内容。
我有一个数据集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
中 ?
之后的所有内容?
我们可以用sub
去掉?
后面的字符。我们使用正后向 ((?<=\?).*
) 来匹配前面有 ?
的一个或多个字符 (.
),并将其替换为 ''
.
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)
这里,我们匹配所有不是?
([^?]+
)后跟?
(\?
)的字符,并使用括号捕获为一组(([^?]+\?)
), 剩下的字符不在组中 (.*
).
或者@Frank 在评论中提到,我们可以匹配 ?
和其余字符(.*
),并将其替换为 \?
作为第二个参数.
my.data$LANDING <- sub("\?.*","\?",my.data$LANDING)
我需要删除列中问号后的所有内容。
我有一个数据集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
中 ?
之后的所有内容?
我们可以用sub
去掉?
后面的字符。我们使用正后向 ((?<=\?).*
) 来匹配前面有 ?
的一个或多个字符 (.
),并将其替换为 ''
.
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)
这里,我们匹配所有不是?
([^?]+
)后跟?
(\?
)的字符,并使用括号捕获为一组(([^?]+\?)
), 剩下的字符不在组中 (.*
).
或者@Frank 在评论中提到,我们可以匹配 ?
和其余字符(.*
),并将其替换为 \?
作为第二个参数.
my.data$LANDING <- sub("\?.*","\?",my.data$LANDING)