我非常喜欢在 R 中使用 magrittr 管道 %>%,并尝试尽可能频繁/高效地使用它们。我经常需要定位管道链中的特定列,例如更改列类型。这导致我必须打破链条/我的工作流程,因为我只需要定位特定列而不是整个数据框。
考虑以下示例:
library(tidyverse)
rm(list = ls())
a <- c(1:20)
b <- rep(c("a", "b"), 10)
df <- data_frame(a, b) %>%
rename(info = b) %>%
recode(x = df$info, "a" = "x") #I'd like to target only the df$info column here
Run Code Online (Sandbox Code Playgroud)
这显然不起作用,因为 dplyr 不希望我更改管道链中函数的 x = 参数。
library(tidyverse)
rm(list = ls())
a <- c(1:20)
b <- rep(c("a", "b"), 10)
df <- data_frame(a, b) %>%
rename(info = b)
df$info <- df$info %>% #this works as expected, but is not as elegant
recode("a" = "x")
Run Code Online (Sandbox Code Playgroud)
这就是我认为应该这样做的方式,但我觉得它并不像我希望的那样高效/优雅,特别是如果我计划在重新编码后将更多函数链接在一起。
有没有一种方便的方法来解决这个问题,以便我可以告诉管道链中的命令仅针对特定列?
我们需要把它放在里面mutate
data_frame(a, b) %>%
rename(info = b) %>%
mutate(info = recode(info, a = "x"))
# A tibble: 20 x 2
# a info
# <int> <chr>
# 1 1 x
# 2 2 b
# 3 3 x
# 4 4 b
# 5 5 x
# 6 6 b
# 7 7 x
# 8 8 b
# 9 9 x
#10 10 b
#11 11 x
#12 12 b
#13 13 x
#14 14 b
#15 15 x
#16 16 b
#17 17 x
#18 18 b
#19 19 x
#20 20 b
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3233 次 |
| 最近记录: |