R:如何在同一个数据帧中将两个相似的行合并为一个?

时间:2016-11-29 15:12:34

标签: r

我有一个像这样的

结构的数据框
path                   clicks
/a/b/index.html         1000
/a/b/index.html#1        500
/a/index.html#1          250

R代码:

path <- c('/a/b/index.html','/a/b/index.html#1','/a/index.html#1')
clicks <- c(1000, 500, 250)
d.f <- data.frame(path,clicks)

前两行基本上是相同的URL路径。 因此,我想将这两行合并为一个路径,添加点击次数并将结果的路径名简化为“#1&#39;同时摆脱旧名称。结果看起来像这样:

path               clicks
#1                  1500
/a/index.html#1      250

从我读到的内容可以通过使用aggregate()来实现,但我无法找到一个体面的介绍,彻底解释这个功能是如何工作的。

无论如何,如果你能为我提供一个解决方案或指向一个对初学者友好的资源来教育自己使用相关资料,我将感激不尽。

2 个答案:

答案 0 :(得分:1)

这就是你想要的(我会在最后解释原因)。

path <- c('/a/b/index.html','/a/b/index.html#1','/a/index.html#1')
clicks <- c(1000, 500, 250)
d.f <- data.frame(path,clicks)
d.f$path <- gsub("\\#\\d", "", d.f$path)
d.f

aggregate(d.f$clicks ~ d.f$path, FUN = sum)

减少与#34;#1&#34;的链接几乎是不可能的,因为这会使第1行和第3行相同,这不是你想要的。另外我假设你有&#34; /a/b/index.html#2"您希望与第1行和第2行聚合而不是单独保存。

另一种选择是附加一个&#34;#1&#34;到所有没有的链接然后聚合

d.f$path[grep("html$", d.f$path)]<-paste0(d.f$path[grep("html$", d.f$path)], "#1")

答案 1 :(得分:1)

#1和#2的可能if (image.imageOrientation != .up) { UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale) var rect = CGRect.zero rect.size = image.size image.draw(in: rect) img = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() } else { img = image } 解决方案:

dplyr

给出了:

df=data.frame(path=c("/a/b/index.html","/a/b/index.html#1","/a/b/index.html#2","/a/index.html"),
              clicks=c(1000,500,150,250))
               path clicks
1   /a/b/index.html   1000
2 /a/b/index.html#1    500
3 /a/b/index.html#2    150
4     /a/index.html    250

  df%>%
  mutate(path_simp=gsub("#.*","",path))%>%
  transform(path=gsub("^[^#]*","",path,perl=T))%>%
  group_by(path_simp)%>%
  mutate(path=ifelse(any(!path==""),path[path!=""][length(path[path!=""])],path_simp))%>%
  summarise(clicks=sum(clicks),path=last(path))%>%
  select(path,clicks)

我们的想法是创建一个新列 path clicks <chr> <dbl> 1 #2 1650 2 /a/index.html 250 ,其中包含之后没有任何#的路径,并在path_simp中替换包含#number且只有#number的任何路径。
path用于分组,path_simp更改为只有#number(如果有)。
pathclicks的摘要使用pathsum()计算last()