小编Hen*_*ugh的帖子

根据值是否高于R中的阈值来分段矢量

我有一个长矢量,我需要根据阈值将其分成段.段是超过阈值的连续值.当值低于阈值时,段结束,下一段开始,其中值再次超过阈值.我需要记录每个段的开始和结束索引.

下面是一个低效的实现.写这个最快最合适的方法是什么?这非常难看,我必须假设有一个更清洁的实现.

set.seed(10)
test.vec <- rnorm(100, 8, 10)
threshold <- 0
segments <- list()
in.segment <- FALSE
for(i in 1:length(test.vec)){

    # If we're in a segment
    if(in.segment){
        if(test.vec[i] > threshold){
            next
        }else{
            end.ind <- i - 1
            in.segment <- FALSE
            segments[[length(segments) + 1]] <- c(start.ind, end.ind)
        }
    }

    # if not in segment
    else{
        if(test.vec[i] > threshold){        
            start.ind <- i
            in.segment <- TRUE
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:所有解决方案的运行时间

感谢所有的回复,这是有帮助的,非常有启发性的.下面是对所有五种解决方案的小测试(提供的四个加上原始示例).正如您所看到的,这四个都是对原始解决方案的巨大改进,但Khashaa的解决方案是目前最快的解决方案.

set.seed(1)
test.vec <- rnorm(1e6, 8, 10);threshold <- 0

originalFunction <- function(x, threshold){ …
Run Code Online (Sandbox Code Playgroud)

r vector

8
推荐指数
2
解决办法
1090
查看次数

从字符串列表中,确定哪些是人名,哪些不是

我有一个类似下面的矢量,并希望确定列表中的哪些元素是人名,哪些不是.我发现了humaniformat包,它格式化了名称,但遗憾的是并不确定字符串是否实际上是一个名称.我还发现了一些用于实体提取的包,但它们似乎需要实际的文本来进行词性标注,而不是单个名称.

pkd.names.quotes <- c("Mr. Rick Deckard", # Name
                      "Do Androids Dream of Electric Sheep", # Not a name
                      "Roy Batty", # Name 
                      "How much is an electric ostrich?", # Not a name
                      "My schedule for today lists a six-hour self-accusatory depression.", # Not a name
                      "Upon him the contempt of three planets descended.", # Not a name
                      "J.F. Sebastian", # Name
                      "Harry Bryant", # Name
                      "goat class", # Not a name
                      "Holden, Dave", # Name
                      "Leon Kowalski", # Name …
Run Code Online (Sandbox Code Playgroud)

text nlp r classification

7
推荐指数
1
解决办法
3391
查看次数

只捕获一次URL的Scrapy蜘蛛

我正在编写一个Scrapy蜘蛛,每天抓取一组URL.但是,其中一些网站非常大,所以我不能每天抓取整个网站,也不想产生必要的大量流量.

一个老问题(这里)问了类似的问题.但是,upvoted响应只是指向一个代码片段(这里),它似乎需要一些请求实例,尽管在响应中没有解释,也没有在包含代码片段的页面上解释.

我试图理解这一点,但发现中间件有点令人困惑.无论是否使用链接的中间件,一个可以多次运行而不重新编写URL的刮刀的完整示例将非常有用.

我已经发布了下面的代码来推动这项工作,但我不一定需要使用这个中间件.任何可以每天抓取并提取新网址的scrapy蜘蛛都可以.显然,一种解决方案是只写出一个已删除URL的字典,然后检查确认每个新URL是否在字典中,但这似乎非常慢/效率低.

蜘蛛

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
from cnn_scrapy.items import NewspaperItem



class NewspaperSpider(CrawlSpider):
    name = "newspaper"
    allowed_domains = ["cnn.com"]
    start_urls = [
        "http://www.cnn.com/"
    ]

    rules = (
        Rule(LinkExtractor(), callback="parse_item", follow=True),
    )

    def parse_item(self, response):
        self.log("Scraping: " + response.url)
        item = NewspaperItem()
        item["url"] = response.url
        yield item
Run Code Online (Sandbox Code Playgroud)

项目

import scrapy


class NewspaperItem(scrapy.Item):
    url = scrapy.Field()
    visit_id = scrapy.Field()
    visit_status = scrapy.Field()
Run Code Online (Sandbox Code Playgroud)

中间件(ignore.py)

from scrapy import log
from scrapy.http import Request …
Run Code Online (Sandbox Code Playgroud)

python middleware web-crawler scrapy scrapy-spider

6
推荐指数
1
解决办法
980
查看次数

缩短坐标之间的箭头/线/段

我用箭头从一组点到另一组arrows().我想将箭头缩短一个共同的长度,以便它们不与标签重叠.然而,考虑到arrows()将坐标作为输入,人们如何做到这一点并不明显.

例如,这是一个例子.

x <- stats::runif(12); y <- stats::rnorm(12)
i <- order(x, y); x <- x[i]; y <- y[i]
plot(x,y, main = "Stack Example", type = 'n')
text(x = x, y = y, LETTERS[1:length(x)], cex = 2, col = sample(colors(), 12))
s <- seq(length(x)-1)  # one shorter than data
arrows(x[s], y[s], x[s+1], y[s+1])
Run Code Online (Sandbox Code Playgroud)

如何缩短箭头以使它们不与标签重叠?

UPDATE

这些都是很好的答案.为了想出一些不会假设点在链中连接的东西,我写了下面的函数,它将x0y0(第1列为x,第2列为y的数据帧)移近xy(格式与x0y0)绝对距离d.

movePoints <- function(x0y0, xy, d){
  total.dist <- apply(cbind(x0y0, xy), 1,
             function(x) stats::dist(rbind(x[1:2], x[3:4])))
  p <- d / total.dist
  p <- 1 …
Run Code Online (Sandbox Code Playgroud)

plot r

3
推荐指数
1
解决办法
480
查看次数