针对 dplyr 管道中的特定列
Targetting a specific column within a dplyr pipe
我非常喜欢在 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
这显然行不通,因为 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")
这是我认为应该完成的方式,但我觉得它没有我希望的那样高效/优雅,特别是如果我计划在重新编码后将更多功能链接在一起。
是否有解决此问题的简便方法,以便我可以让管道链中的命令仅针对特定列?
我们需要把它放在里面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
我非常喜欢在 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
这显然行不通,因为 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")
这是我认为应该完成的方式,但我觉得它没有我希望的那样高效/优雅,特别是如果我计划在重新编码后将更多功能链接在一起。
是否有解决此问题的简便方法,以便我可以让管道链中的命令仅针对特定列?
我们需要把它放在里面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