是否可以通过管道传输数据帧变量

时间:2018-12-15 14:33:27

标签: r magrittr

我有两个单独的操作:

allusers$ref <- str_to_upper(allusers$ref)

allusers$ref <- str_trim(allusers$ref)

是否可以通过管道传输它们?

allusers$ref <- str_to_upper(allusers$ref) %>% str_trim(allusers$ref)

给予

  

“ match.arg(side)中的错误:'arg'的长度必须为1”

理想情况下,我不会每次都输入allusers$..

2 个答案:

答案 0 :(得分:3)

如果您只想在base R中执行此操作,最简单的方法可能是使用常规函数组合…

allusers$ref <- str_trim(str_to_upper(allusers$ref))

或者,您可以使用within

allusers <- within(allusers, {
  ref <- str_to_upper(ref)
  ref <- str_trim(ref)
})

甚至结合以下选项:

allusers <- within(allusers, {
  ref <- str_trim(str_to_upper(ref))
})

尽管我现在确实倾向于使用dplyr风格的mutate管道,但还是可以看到一些替代方案

答案 1 :(得分:2)

好的,你可以写

allusers$ref <- allusers$ref %>% str_to_upper %>% str_trim

那是因为您想将str_to_upperstr_trim应用于字符串,并且通过管道传输allusers$ref您确实将第一个参数传递给该字符串。

有些传统的方式是

allusers <- allusers %>% mutate(ref = str_trim(str_to_upper(ref)))