在数据框中搜索多个唯一值并使用它们创建新子集

时间:2012-11-19 17:02:29

标签: r search grep gsub

  

可能重复:
  Searching for unique values in dataframe and creating a table with them

自从我开始使用R<不久前,我发现这个网站对于帮助我构建我的脚本非常有用。我再次遇到了一个挑战,我似乎无法在任何地方找到答案。这是我的问题:在我的数据中,我有一个列,每行包含一个不同的URL。在每个URL中都有我要提取的特定信息。目前我在excel中这样做,因为我被告知在R中不可能做到并且没有任何功能可以做到。

该URL看起来像这个示例格式,它将在“源”列中找到

http://www.googleclick.com?utm_source=ADX&utm_medium=bannerB&ID56789

HTTP // www.googleclick.com utm_source = ADW&安培; utm_medium = bannerA&安培; ID56009

HTTP // www.googleclick.com utm_source = ADWORDS&安培; utm_medium = bannerC&安培; ID53389

对我来说重要的URL部分是“utm_source = ADX”和“utm_smedium = bannerA”位。我的数据看起来像这样:

User / Source
1 / http//www.googleclick.com?utm_source=ADX&utm_medium=bannerB&ID56789
2 / http//www.googleclick.com?utm_source=ADW&utm_medium=bannerA&ID56009
3 / http//www.googleclick.com?utm_source=ADWords&utm_medium=bannerC&ID53389

我需要做的是从URL捕获utm_source并创建一个具有以下描述的新子集:

User / utm_source
1 / ADX
2 /  ADW&
3 /  ADWords

我将需要另一个与“utm_medium”做同样事情的子集,导致

User / utm_medium
1 / bannerB
2 / bannerA
3 . BannerC

所以本质上我需要R在整个数据帧中搜索值“utm_source =”和“utm_medium”,一旦找到它们,我想要一个新的子集,其中col1为用户ID,col2为utm_source或utm_mnedium,在这些列中,我需要在“=”和“&”之间找到的初始URL中的信息。标志>我希望这是有道理的。

我知道“grep”是一个在datafreme中定位特定信息的函数,例如:

 data <- total[grepl("utm_source", total$Source), ]

这将为我提供包含单词“utm_source”的所有行,但我需要的是“utm_source”之后的信息。通常我的数据可以有多达500.000行。目前我使用excel函数“text to columns”为此,我基本上将URL分成小位并保留我需要的列,但这可能是一个非常混乱和冗长的过程。

有没有办法修改grepl函数以满足我需要的标准?

我也建议使用函数gsub,但我无法准确理解它是如何工作的以及我需要如何应用它。任何人都可以清楚地解释如何使用这个功能来实现我的目标,如果你碰巧知道它当然是。

我需要警告你,我是R的新手,所以对你来说可能看起来非常基本的东西,对我来说可能非常复杂,所以请不要冒犯我如果要求你提供更多细节。

最佳

大卫罗杰斯

0 个答案:

没有答案