我有一个看起来像这样的数据集(我在这里略微简化):
第1列的用户ID为
第2列有一个网址标题
第3列有一个实际的网址
数据已按用户和时间排序。所以它的用户1和他们按时间升序访问的所有URL,然后用户2和他们按时间升序等访问的URL等等
我想要做的是循环数据集并寻找"三胞胎"第一行网址不包含我的关键字(比如google或facebook或nytimes等),第二行网址包含我的关键字,第三行不包含我的关键字。基本上检查用户在任何特定网站之前和之后访问过的网站。
我发现我可以使用以下方式查找关键字:
if(length(grep("facebook",url)) > 0)
但我还没有能够弄清楚如何遍历代码并实现我想要做的事情。
如果你能将你的回答分成两部分,我真的很感激:
第1部分:有没有办法循环访问数据框并可以访问所有列?我能够使用以下代码处理单个列:
new_data <- data.frame (url)
for (url in data$url)
if(length(grep("keyword",url)) > 0) {
new_data <- rbind(new_data,data.frame(url = url))
}
这种方法有限,因为我只能引用数据框中的单个列。什么是更好的解决方案?我试过了:
第2部分:如前所述,我如何实现我的实际目标?我想学习这样做&#34; R方式&#34 ;;我想它会涉及到plyr或lapply,但即使经过大量阅读,我也无法弄清楚如何使用这些函数,更不用说使用它们并包含对上一行/下一行的引用。
在此先感谢您的帮助,我们非常感谢您的指导!
答案 0 :(得分:0)
使用[-1]
:
last <- nrow(df)
penu <- nrow(df) - 1
df$ContainsKeyword <- FALSE
df$ContainsKeyword[grep("keyword", df$url)] <- TRUE
df$TripletFound <- NA
for (i in 2:penu){
df$TripletFound[i] <- {df$ContainsKeyword[i-1] & df$ContainsKeyword[i+1]} & {!df$ContainsKeyword[i]}
}