在data.frame中的两列之间添加一列

Mar*_*ark 69 r insert dataframe

我有一个包含a,b和c列的数据框.我想在b和c之间添加一个新列d.我知道我可以通过使用cbind在最后添加d但是如何将它插入两列之间?

Kev*_*rca 67

我建议你使用的功能add_column()tibble包.

library(tibble)
dataset <- data.frame(a = 1:5, b = 2:6, c=3:7)
add_column(dataset, d = 4:8, .after = 2)
Run Code Online (Sandbox Code Playgroud)

请注意,您可以使用列名而不是列索引:

add_column(dataset, d = 4:8, .after = "b")
Run Code Online (Sandbox Code Playgroud)

或者使用参数.before而不是.after更方便.

add_column(dataset, d = 4:8, .before = "c")
Run Code Online (Sandbox Code Playgroud)

  • 我删除了名字.似乎没有增加太多,并且虽然Hadley被列为***包的作者KirillMüller被列为[创建者和维护者](https://cran.r-project.org/web/packages/tibble/的index.html). (5认同)

ash*_*h57 32

只是一个R初学者,但我认为这也有效:

添加新列:

df$d <- list/data
Run Code Online (Sandbox Code Playgroud)

然后你可以重新排序它们.

df <- df[, c("a", "b", "d", "c")]
Run Code Online (Sandbox Code Playgroud)

  • df < - df [c("a","b","d","c")]也有效 (2认同)
  • 我应该提到,`setcolorder` 是用于 data.table,而不是 data.frame! (2认同)

Mat*_*erg 19

您可以使用[重新排序列,或者按所需顺序显示列.

d <- data.frame(a=1:4, b=5:8, c=9:12)
target <- which(names(d) == 'b')[1]
cbind(d[,1:target,drop=F], data.frame(d=12:15), d[,(target+1):length(d),drop=F])

  a b  d  c
1 1 5 12  9
2 2 6 13 10
3 3 7 14 11
4 4 8 15 12
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案.但我不得不承认,这也是为什么R对初学者来说很难的一个很好的例子. (11认同)
  • 话虽如此,我认为@ashah57 在下面有一个更简单、更清晰的答案。没有必要对这样的事情太花哨。 (4认同)

the*_*ail 12

假设c始终紧随其后b,b无论bdata.frame中的哪个位置,此代码都会添加一列.

> test <- data.frame(a=1,b=1,c=1)
> test
  a b c
1 1 1 1

> bspot <- which(names(test)=="b")

> data.frame(test[1:bspot],d=2,test[(bspot+1):ncol(test)])
  a b d c
1 1 1 2 1
Run Code Online (Sandbox Code Playgroud)

或者更自然地:

data.frame(append(test, list(d=2), after=match("b", names(test))))
Run Code Online (Sandbox Code Playgroud)


buh*_*htz 8

创建一个示例 data.frame 并向其添加一列。

df = data.frame(a = seq(1, 3), b = seq(4,6), c = seq(7,9))
df['d'] <- seq(10,12)
df

  a b c  d
1 1 4 7 10
2 2 5 8 11
3 3 6 9 12
Run Code Online (Sandbox Code Playgroud)

按列索引重新排列

df[, colnames(df)[c(1:2,4,3)]]
Run Code Online (Sandbox Code Playgroud)

或按列名

df[, c('a', 'b', 'd', 'c')]
Run Code Online (Sandbox Code Playgroud)

结果是

  a b  d c
1 1 4 10 7
2 2 5 11 8
3 3 6 12 9
Run Code Online (Sandbox Code Playgroud)


Ric*_*rdo 5

这是在数据框的特定位置插入列的快速但肮脏的方法。就我而言,原始数据框中有 5 列:并且我将在和之间c1, c2, c3, c4, c5插入一个新列。c2bc2c3

1)我们首先创建测试数据框:

> dataset <- data.frame(c1 = 1:5, c2 = 2:6, c3=3:7, c4=4:8, c5=5:9)
> dataset
  c1 c2 c3 c4 c5
1  1  2  3  4  5
2  2  3  4  5  6
3  3  4  5  6  7
4  4  5  6  7  8
5  5  6  7  8  9
Run Code Online (Sandbox Code Playgroud)

c2b2)在数据框的末尾添加新列:

> dataset$c2b <- 10:14
> dataset
  c1 c2 c3 c4 c5 c2b
1  1  2  3  4  5  10
2  2  3  4  5  6  11
3  3  4  5  6  7  12
4  4  5  6  7  8  13
5  5  6  7  8  9  14
Run Code Online (Sandbox Code Playgroud)

3) 根据列索引对数据框重新排序。就我而言,我想在现有列 2 和 3 之间插入新列 (6)。我通过使用c(1:2, 6, 3:5)相当于 的向量来寻址数据帧上的列来实现这一点c(1, 2, 6, 3, 4, 5)

> dataset <- dataset[,c(1:2, 6, 3:5)]
> dataset
  c1 c2 c2b c3 c4 c5
1  1  2  10  3  4  5
2  2  3  11  4  5  6
3  3  4  12  5  6  7
4  4  5  13  6  7  8
5  5  6  14  7  8  9
Run Code Online (Sandbox Code Playgroud)

那里!