我有一个像这样的
结构的数据框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()
来实现,但我无法找到一个体面的介绍,彻底解释这个功能是如何工作的。
无论如何,如果你能为我提供一个解决方案或指向一个对初学者友好的资源来教育自己使用相关资料,我将感激不尽。
答案 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(如果有)。
path
和clicks
的摘要使用path
和sum()
计算last()
。