我正在寻找一个正则表达式来 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))
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) 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) 我有元素对,我需要将每个第二个元素拆分为多个逗号分隔的元素,并将它们堆叠成二维,第一个元素根据需要重复多次:
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)
(数据帧输出也不错。)