Dplyr在指定位置更改新列

时间:2018-07-03 19:55:43

标签: r dplyr tidyverse

一个例子:

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))

如何在“ a”(或任何其他定义的位置)之后而不是末尾添加“ a1”?

谢谢。

4 个答案:

答案 0 :(得分:4)

另一个选择是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

答案 1 :(得分:3)

扩展www的答案,我们可以使用dplyr的task.append(elem);函数对新创建的列进行重新排序,只要我们认为合适即可:

select_helper

答案 2 :(得分:2)

此更新可能对发现此问题的其他人有用-现在可以直接在mutate中实现(我正在使用dplyr v1.0.2)。

只需指定新列应位于哪个现有列之后或之前,例如:

df_after <- df %>% 
   mutate(a1=sum(a+1), .after = a)

df_before <- df %>% 
   mutate(a1=sum(a+1), .before = b)

答案 3 :(得分:1)

mutate函数将始终在最后添加新创建的列。但是,我们可以使用mutateselect函数之后按字母顺序对列进行排序。

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