一个例子:
a = c(10,20,30)
b = c(1,2,3)
c = c(4,5,6)
d = c(7,8,9)
df=data.frame(a,b,c,d)
library(dplyr)
df_1 = df %>% mutate(a1=sum(a+1))
Run Code Online (Sandbox Code Playgroud)
如何在“ a”(或任何其他定义的位置)之后而不是末尾添加“ a1”?
谢谢。
mon*_*nis 16
可能对发现此问题的其他人有用的更新 - 现在可以直接在mutate(我使用的是dplyrv1.0.2)中实现。
只需指定新列应位于哪个现有列之后或之前,例如:
df_after <- df %>%
mutate(a1=sum(a+1), .after = a)
df_before <- df %>%
mutate(a1=sum(a+1), .before = b)
Run Code Online (Sandbox Code Playgroud)
扩展 www 的答案,我们可以使用 dplyr 的select_helper函数来重新排序我们认为合适的新创建的列:
library(dplyr)
## add a1 after a
df %>%
mutate(a1 = sum(a + 1)) %>%
select(a, a1, everything())
#> a a1 b c d
#> 1 10 63 1 4 7
#> 2 20 63 2 5 8
#> 3 30 63 3 6 9
## add a1 after c
df %>%
mutate(a1 = sum(a + 1)) %>%
select(1:c, a1, everything())
#> a b c a1 d
#> 1 10 1 4 63 7
#> 2 20 2 5 63 8
#> 3 30 3 6 63 9
Run Code Online (Sandbox Code Playgroud)
另一种选择是add_column从tibble
library(tibble)
add_column(df, a1 = sum(a + 1), .after = "a")
# a a1 b c d
#1 10 63 1 4 7
#2 20 63 2 5 8
#3 30 63 3 6 9
Run Code Online (Sandbox Code Playgroud)
该mutate函数将始终在末尾添加新创建的列。mutate但是,我们可以使用 函数后按字母顺序对列进行排序select。
library(dplyr)
df_1 <- df %>%
mutate(a1 = sum(a + 1)) %>%
select(sort(names(.)))
df_1
# a a1 b c d
# 1 10 63 1 4 7
# 2 20 63 2 5 8
# 3 30 63 3 6 9
Run Code Online (Sandbox Code Playgroud)