这是我的代码:
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在管道中不起作用,任何人都有任何见解?
答案 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