str_replace_all无法在管道中工作

时间:2017-08-24 22:24:19

标签: r dplyr pipeline stringr

这是我的代码:

df <- df %>%
  filter(conditions x, y, and z) %>%
  str_replace_all(string, pattern, replacement)

这样做时,我收到了错误:

Error in str_replace_all(., string, pattern, replacement) :
  unused argument("")

我知道代码在复制方面根本不是很有用,正如我之前所说,我不能共享数据,但假设输入是正确的(我已经通过改变变量使它工作了代替)。替换是一个空字符串,但据我所知,这应该不重要。

我只是好奇为什么str_replace_all在管道中不起作用,任何人都有任何见解?

1 个答案:

答案 0 :(得分:1)

编辑:看来@akrun删除了他的答案,所以在下面转载。我做了(也许是错误的)假设,你希望转换整个数据帧,并且数据帧已经过适当的格式化。通过更清晰的问题和样本数据,可以避免这些问题。

对于你的全局变量的值没有线索并且没有数据(你可以生成假数据,顺便说一下,只要它出现同样的问题),这有点难以分辨,但我的猜测是在下面。

当进行管道传输时,前一个结果将作为下一个函数的第一个参数传入。您可以在错误消息中看到此消息:Error in str_replace_all(., string, pattern, replacement) - .,显示参数中的管道。 Here,第一个参数是“string”。因此,管道输入结果用作string,“字符串”用作pattern,“模式”用于replacement,而“”用于替换保留为未使用的参数,导致您的错误。

可能有助于使用str_replace_all(pattern, replacement),或指定参数:str_replace_all(pattern = pattern, replacement = replacement)

实施例

data <- as.data.frame(matrix(ncol=2, nrow=2))
data$V1 <- c("  NA", "foo")
data$V2 <- c("bar", "boo")
data %>%
    str_replace_all("oo", "xx")

如果您只希望转换一列(来自@akrun): 只需使用mutate根据预先存在的列创建新列。如果要替换列,请为其命名:

实施例。

data <- as.data.frame(matrix(ncol=2, nrow=2))
data$V1 <- c("  NA", "foo")
data$V2 <- c("bar", "boo")
data
    V1  V2
1   NA bar
2  foo boo

#new column
data %>%
    mutate(new = str_replace_all(V1, "oo", "xx"))

    V1  V2  new
1   NA bar   NA
2  foo boo  fxx

#column replacement
data %>%
    mutate(V1 = str_replace_all(V1, "oo", "xx"))

    V1  V2
1   NA bar
2  fxx boo