将 mutate_at() 与否定的 select 助手一起使用,例如(不是 one_of())
Using mutate_at() with negated select helpers e.g(not one_of())
我有这样的数据:
library(dplyr)
set.seed(123)
df <- data_frame(X1 = rep(LETTERS[1:4], 6),
X2 = rep(1:2, 12),
ref = sample(1:50, 24),
sampl1 = sample(1:50, 24),
var2 = sample(1:50, 24),
meas3 = sample(1:50, 24))
使用 dplyr
的 scooped 命令,我可以一次编辑和创建多个列,例如:
df %>% mutate_if(is.numeric, funs(new = . - ref))
如果我只想对一部分列执行此操作,我可以像这样使用 select
助手:
df %>% mutate_at(vars(one_of(c("X2", "ref"))), funs(new = . - ref))
但是在我的例子中,我知道我的数据将始终包含 X1
、X2
和 ref
列,但我想以仅变异的方式对数据进行子集化不是 X1
、X2
和 ref
的列。这些其他列的编号和名称是可变的,但始终是数字。我以为我可以做这样的事情:
df %>% mutate_at(vars(!one_of(c("X1", "X2", "ref"))), funs(new = . - ref))
或者也许
df %>% mutate_at(vars(one_of(!names %in% c("X1", "X2", "ref"))), funs(new = . - ref))
但都不起作用。你如何做负 dplyr select
帮手?
one_of
需要 -
而不是 !
df %>%
mutate_at(vars(-one_of(c("X1", "X2", "ref"))), funs(new = . - ref))
# A tibble: 24 x 9
# X1 X2 ref sampl1 var2 meas3 sampl1_new var2_new meas3_new
# <chr> <int> <int> <int> <int> <int> <int> <int> <int>
# 1 A 1 15 33 14 36 18 -1 21
# 2 B 2 39 35 43 1 -4 4 -38
# 3 C 1 20 27 3 23 7 -17 3
# 4 D 2 42 28 21 11 -14 -21 -31
# 5 A 1 44 14 37 18 -30 -7 -26
# 6 B 2 3 7 6 28 4 3 25
# 7 C 1 24 43 25 16 19 1 -8
# 8 D 2 49 39 9 5 -10 -40 -44
# 9 A 1 46 30 45 47 -16 -1 1
#10 B 2 19 50 31 45 31 12 26
我有这样的数据:
library(dplyr)
set.seed(123)
df <- data_frame(X1 = rep(LETTERS[1:4], 6),
X2 = rep(1:2, 12),
ref = sample(1:50, 24),
sampl1 = sample(1:50, 24),
var2 = sample(1:50, 24),
meas3 = sample(1:50, 24))
使用 dplyr
的 scooped 命令,我可以一次编辑和创建多个列,例如:
df %>% mutate_if(is.numeric, funs(new = . - ref))
如果我只想对一部分列执行此操作,我可以像这样使用 select
助手:
df %>% mutate_at(vars(one_of(c("X2", "ref"))), funs(new = . - ref))
但是在我的例子中,我知道我的数据将始终包含 X1
、X2
和 ref
列,但我想以仅变异的方式对数据进行子集化不是 X1
、X2
和 ref
的列。这些其他列的编号和名称是可变的,但始终是数字。我以为我可以做这样的事情:
df %>% mutate_at(vars(!one_of(c("X1", "X2", "ref"))), funs(new = . - ref))
或者也许
df %>% mutate_at(vars(one_of(!names %in% c("X1", "X2", "ref"))), funs(new = . - ref))
但都不起作用。你如何做负 dplyr select
帮手?
one_of
需要 -
而不是 !
df %>%
mutate_at(vars(-one_of(c("X1", "X2", "ref"))), funs(new = . - ref))
# A tibble: 24 x 9
# X1 X2 ref sampl1 var2 meas3 sampl1_new var2_new meas3_new
# <chr> <int> <int> <int> <int> <int> <int> <int> <int>
# 1 A 1 15 33 14 36 18 -1 21
# 2 B 2 39 35 43 1 -4 4 -38
# 3 C 1 20 27 3 23 7 -17 3
# 4 D 2 42 28 21 11 -14 -21 -31
# 5 A 1 44 14 37 18 -30 -7 -26
# 6 B 2 3 7 6 28 4 3 25
# 7 C 1 24 43 25 16 19 1 -8
# 8 D 2 49 39 9 5 -10 -40 -44
# 9 A 1 46 30 45 47 -16 -1 1
#10 B 2 19 50 31 45 31 12 26