小编syr*_*yre的帖子

在 R 中使用 Grep 查找具有自定义“扩展”边界的单词

我正在寻找一个正则表达式来 grep 整个单词,包括用数字或下划线分隔的单词。\\b将数字和下划线视为单词的一部分,而不是边界。

例如,我想在“DOG MOUSE CAT”、“DOG MOUSE:CAT”和“DOG_MOUSE9CAT”以及表达式的末尾或开头捕捉鼠标,如“MOUSE9CAT”和“DOG_MOUSE” . 基本上,我正在寻找的边界是任何非大写字母字符加上行/表达式的开头和结尾(可能会遗漏\\b此处捕获的其他一些情况)。

我试过了:

"[[0-9_]\\b]MOUSE[[0-9_]\\b]"
"[[0-9_]|\\b]MOUSE[[0-9_]|\\b]"
"[$|[^A-Z]]MOUSE[^|[^A-Z]]"
"[?<=^|[^A-Z]]MOUSE[?=$|[^A-Z]]"
Run Code Online (Sandbox Code Playgroud)

他们都没有工作。

我实际上正在寻找几个词(基于一个长的值向量),所以最终结果应该看起来像

grep(paste("\\b", paste(searchwords, collapse = "\\b|\\b"), "\\b"), targettext)
Run Code Online (Sandbox Code Playgroud)

(使用不同的分隔符,因为\\b对我来说太严格了)。

(这与用户 Nick Sabbe 在此处的评论中提出的问题类似:Using grep in R to find strings as whole words (but not strings as part of words)

regex r

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

为什么使用 st_intersection 而不是 st_intersects?

st_intersection与 相比非常慢st_intersects。那么为什么不使用后者而不是前者呢?这是一个带有小型玩具数据集的示例,但对于与实际地理区域边界相交的仅 62,020 个点的实际集合而言,执行时间的差异是巨大的。我有 24Gb 的 RAM 并且st_intersects代码需要几秒钟,而st_intersection代码需要超过 15 分钟(可能更多,我没有耐心等待......)。st_intersection做任何我不喜欢的事情st_intersects吗?

下面的代码处理sfc对象,但我相信对sf对象同样有效。

library(sf)
library(dplyr)

# create square
s <- rbind(c(1, 1), c(10, 1), c(10, 10), c(1, 10), c(1, 1)) %>% list %>% st_polygon %>% st_sfc
# create random points
p <- runif(50, 0, 11) %>% cbind(runif(50, 0, 11)) %>% st_multipoint %>% st_sfc %>% st_cast("POINT")

# intersect points and square with st_intersection
st_intersection(p, s)

# intersect points …
Run Code Online (Sandbox Code Playgroud)

r topology geospatial r-sf

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

从另一个数据帧更新数据帧行和列的子集

df1 <- data.frame(w = 1:4, x = c("a", "b", "b", "c"), y = NA)
df1$y[df1$x == "c"] = 1
df2 <- data.frame(x = c("a", "b"), y = 1:2, z = 3:4)
Run Code Online (Sandbox Code Playgroud)

我想用df2中的值更新df1以匹配行,包括所有df2列.

预期结果:

df1
  w x  y  z
1 1 a  1  3
2 2 b  2  4
3 3 b  2  4
4 4 c  1 NA
Run Code Online (Sandbox Code Playgroud)

这是我的尝试:

# add missing columns from df2 to df1
df1[setdiff(colnames(df2), colnames(df1))] <- NA
# update values in df1 from df2 for matching …
Run Code Online (Sandbox Code Playgroud)

r

2
推荐指数
1
解决办法
511
查看次数

拆分所有其他向量元素并堆叠成矩阵或数据帧

我有元素对,我需要将每个第二个元素拆分为多个逗号分隔的元素,并将它们堆叠成二维,第一个元素根据需要重复多次:

v <- c("Cha, Seungman", "1,2", "Jin, Yan", "3")
Run Code Online (Sandbox Code Playgroud)

(元素对和逗号分隔元素的数量可以在 2 以上。)

我需要:

     [,1]            [,2] 
[1,] "Cha, Seungman" "1"
[2,] "Cha, Seungman" "2"
[3,] "Jin, Yan"      "3"  
Run Code Online (Sandbox Code Playgroud)

(数据帧输出也不错。)

split r

0
推荐指数
1
解决办法
48
查看次数

标签 统计

r ×4

geospatial ×1

r-sf ×1

regex ×1

split ×1

topology ×1