【发布时间】:2018-07-25 15:47:47
【问题描述】:
我有一个数据框,其中有一列 URL,我想从中删除第一个问号之后的所有内容。有些 URL 没有问号,我希望这些保持不变。简而言之,我想去掉所有的跟踪。这是一个示例网址。
这是我正在寻找的结果。
https://www.dummy.com/2017/11/29/four-questions-we-have-about-stuff/
【问题讨论】:
我有一个数据框,其中有一列 URL,我想从中删除第一个问号之后的所有内容。有些 URL 没有问号,我希望这些保持不变。简而言之,我想去掉所有的跟踪。这是一个示例网址。
这是我正在寻找的结果。
https://www.dummy.com/2017/11/29/four-questions-we-have-about-stuff/
【问题讨论】:
假设您的数据框名为df,其中有一列名为url:
df$url <- sub('\\?.*', '', df$url)
【讨论】:
与strsplit:
url <- "https://www.dummy.com/2017/11/29/four-questions-we-have-about-stuff/?utm_source=exacttarget&utm_medium=newsletter&utm_term=dummydotcom-dummycomnewsletter&utm_content=na-readblog-blogpost&utm_campaign=dummy"
result <- strsplit(url, "\\?")[[1]][1]
输出:
> result
[1] "https://www.dummy.com/2017/11/29/four-questions-we-have-about-stuff/"
这是一个在向量而不是单个字符串上使用它的示例:
strings <- c("here?string", "another?string", "stringnoquestion", "one?more")
> sapply(strsplit(strings, "\\?"), function(x) x[1])
[1] "here" "another" "stringnoquestion" "one"
strsplit 返回一个列表,因为它被编写用于向量和奇异元素。因此,在第一个示例中,[[1]] 正在访问列表的第一个元素,然后 [1] 正在访问该列表的第一个元素,即 ? 之前的 url。
这是第一个分解为步骤的示例:
# Returns a list of length one
> strsplit(url, "\\?")
[[1]]
[1] "https://www.dummy.com/2017/11/29/four-questions-we-have-about-stuff/"
[2] "utm_source=exacttarget&utm_medium=newsletter&utm_term=dummydotcom-dummycomnewsletter&utm_content=na-readblog-blogpost&utm_campaign=dummy"
# Each element of the list is a vector
> strsplit(url, "\\?")[[1]]
[1] "https://www.dummy.com/2017/11/29/four-questions-we-have-about-stuff/"
[2] "utm_source=exacttarget&utm_medium=newsletter&utm_term=dummydotcom-dummycomnewsletter&utm_content=na-readblog-blogpost&utm_campaign=dummy"
# The first element of that vector
> strsplit(url, "\\?")[[1]][1]
[1] "https://www.dummy.com/2017/11/29/four-questions-we-have-about-stuff/"
【讨论】: