str_replace_all 不在管道中工作

Mok*_*ire 8 pipeline r stringr dplyr

这是我的代码:

df <- df %>%
  filter(conditions x, y, and z) %>%
  str_replace_all(string, pattern, replacement)
Run Code Online (Sandbox Code Playgroud)

这样做时,我收到错误:

Error in str_replace_all(., string, pattern, replacement) :
  unused argument("")
Run Code Online (Sandbox Code Playgroud)

我知道代码在复制方面一点用处都没有,正如我之前所说,我不能共享数据,但假设输入是正确的(我已经通过改变变量来让它工作)。替换是一个空字符串,但据我所知,这应该无关紧要。

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

aku*_*aku 10

编辑:看来@akrun 已经删除了他的答案,因此转载如下。我做出了(可能是错误的)假设您希望转换整个数据帧,并且数据帧的格式正确。这些问题可以通过更清晰的问题和样本数据来避免。

如果不知道全局变量的值和数据(您可以生成假数据,顺便说一句,只要它存在相同的问题),这有点难以判断,但我的猜测如下。

管道传输时,前一个结果将作为下一个函数的第一个参数传入。您可以在错误消息中看到这一点:Error in str_replace_all(., string, pattern, replacement)--.,显示管道输入参数。 这里,第一个参数是“字符串”。因此,管道输入的结果被用作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")
Run Code Online (Sandbox Code Playgroud)

如果您只希望转换一列(来自 @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
Run Code Online (Sandbox Code Playgroud)

  • 所以 `df %&gt;% str_replace_all( "[aeiou]", toupper)` 仍然对我有用,我只是根据他们的代码假设 MoikeEire 不需要新列,但整个数据帧都被转换了。如果他们只想转换选择的列,那么我同意,mutate 肯定会更合适。 (2认同)