gpt4 book ai didi

r - 数据框上的 gsubfn

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

在给定替换列表的情况下搜索并替换数据框中的元素。

代码:

testing123tmp <- data.frame(x=c("it's", "not", "working"))
testing123tmp$x <- as.character(testing123tmp$x)
tmp <- list("it's" = "hey", "working"="dead")
apply(testing123tmp,2,function(x) gsubfn('.', tmp, x))

预期输出:

      x        
[1,] hey
[2,] not
[3,] dead

我当前的输出:

     x        
[1,] "it's"
[2,] "not"
[3,] "working"

一直在寻找 chartr 和 gsub 中可能的解决方案,但希望简单(短编码),因为此类操作需要多个 gsub。我的变量 tmp 也可以缩放为多对替换,这样:

tmp <- list("it's" = "hey", 
"working"="dead",
"other" = "other1",
.. = .. ,
.. = .. ,
.. = .. )

编辑/更新#1:

  • 也想要上面 gsubfn 中的解决方案和数据框架

最佳答案

问题是这些:

  • 点仅匹配一个字符,因此它永远不会匹配整个字符串,除非整个字符串只有一个字符,因此永远不会匹配 tmp 中的名称。使用 ".*" 匹配整个字符串。如果您想匹配单词,即 x 的每个组件中可能有几个单词由空格分隔,例如 x 的一个组件可能是 "it's not" 而我们仍然想匹配 it's 然后使用 "\\S+"。人们还可以想象到其他变体,这提供了一个包含其中许多变体的框架。

  • gsubfn 的第三个参数已经可以是向量,gsubfn 将对其进行迭代,因此没有必要使用 apply。 (它仍然可以与 apply 一起使用,但这是不必要的。)

  • 要将所有内容保存在数据框中,一种简单的方法是使用 transform,如下所示(或者使用 transform2,也在 gsubfn 包中)。 x 将自动引用 testing123tmp 数据帧中的 x 列,transform 将生成一个新的数据帧不覆盖原来的。如果你想保持这些分开,将 transform 的结果分配给一个新名称,或者如果你想覆盖 testing123tmp 然后将它分配回 testing123tmp .

  • 我们可以使用 stringsAsFactors = FALSE 来避免生成字符列。

    testing123tmp <- data.frame(x=c("it's", "not", "working"), stringsAsFactors = FALSE)

因此我们可以将代码简化为:

transform(testing123tmp, y = gsubfn(".*", tmp, x))

给出以下数据框:

        x    y
1 it's hey
2 not not
3 working dead

如果我们想覆盖 x 列而不是保留单独的输入和输出列,我们可以在 transform 中使用 x = ... code> 语句而不是 y = ...

关于r - 数据框上的 gsubfn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49513150/

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