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)