gpt4 book ai didi

regex - 如何替换数据框中的字母?

转载 作者:行者123 更新时间:2023-12-02 21:32:00 24 4
gpt4 key购买 nike

我有一个数据框。我想搜索每个字母或符号。

例如,我想要字母“g”和“h”。如果该字母在字符串中的任何位置,则分配 1,否则分配 0。

code              gh     HI    &*
efhikq&* 0 0 1
efhiku& 0 0 0
DHIfux 0 1 0
DHIJUVXYefhjoq!* 0 1 0
HIfghv( 1 1 0
hiIvg 1 0 0

最佳答案

更新,对于更复杂的版本,要求所有字母都存在,但顺序不限:

haystack <- c("efhikq&*", "efhiku&", "DHIfux", "DHIJUVXYefhjoq!*", "HIfghv(", "hiIvg")
needle <- c("gh", "HI", "&*")

needle.split <- setNames(strsplit(needle, ""), needle)

`rownames<-`(
sapply(
needle.split,
function(x) {
apply(sapply(x, grepl, haystack, fixed=TRUE), 1, all) + 0
} ), haystack)

在这里,我们首先将 Needle 分解为组成字符,然后对于一组字符中的每个字符,我们运行 grepl反对 haystack (这是最里面的 sapply ),然后我们通过检查最里面的 sapply 矩阵的每一行的所有值来确保每个字符都存在。使用 apply 制作和all 。我们还使用 + 0 转换为 1/0位(也保留矩阵结构)。最后是最外层sapply将为每个字符组重复此逻辑,并缝合结果,我们使用 rownames<- 添加行名。技巧。

这与所需的输出匹配:

                 gh HI &*
efhikq&* 0 0 1
efhiku& 0 0 0
DHIfux 0 1 0
DHIJUVXYefhjoq!* 0 1 0
HIfghv( 1 1 0
hiIvg 1 0 0

旧版本匹配所有字符:

这是一个解决方案:

`rownames<-`(sapply(needle, grepl, haystack, fixed=TRUE) + 0, haystack)

产生:

                 gh HI &*
efhikq&* 0 0 1
efhiku& 0 0 0
DHIfux 0 1 0
DHIJUVXYefhjoq!* 0 1 0
HIfghv( 1 1 0
hiIvg 0 0 0

这基本上是 Ananda 建议的实现(直到完成此操作后我才看到他的评论),并添加了使用替换函数 rownames<- 的“技巧”以非替换形式附加行名称。数据如下:

haystack <- c("efhikq&*", "efhiku&", "DHIfux", "DHIJUVXYefhjoq!*", "HIfghv(", "hiIvg")
needle <- c("gh", "HI", "&*")

关于regex - 如何替换数据框中的字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22129542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com