110

列 a、b、および c を持つデータ フレームがあります。b と c の間に新しい列 d を追加したいと思います。

cbindを使用して最後に d を追加できることはわかっていますが、2 つの列の間に挿入するにはどうすればよいですか?

4

18 に答える 18

97

パッケージの関数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)

列インデックスの代わりに列名を使用できることに注意してください。

add_column(dataset, d = 4:8, .after = "b")

または、より便利な場合.beforeの代わりに引数を使用します。.after

add_column(dataset, d = 4:8, .before = "c")
于 2016-11-24T14:46:28.750 に答える
51

新しい列に追加します。

df$d <- list/data

その後、それらを並べ替えることができます。

df <- df[, c("a", "b", "d", "c")]
于 2013-07-11T02:14:16.940 に答える
26

[で列を並べ替えたり、必要な順序で列を表示したりできます。

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
于 2012-11-21T22:03:48.610 に答える
17

cが常にすぐに続くと仮定するとb、このコードはdata.framebのどこにいても後に列を追加bします。

> 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

あるいはもっと自然に:

data.frame(append(test, list(d=2), after=match("b", names(test))))
于 2012-11-21T22:08:33.787 に答える
4

これは、データ フレームの特定の位置に列を挿入する簡単で汚い方法です。私の場合、元のデータ フレームに 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

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

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

そこには!

于 2016-03-11T18:20:48.637 に答える
0

あなたは以下のようにすることができます -

df <- data.frame(a=1:4, b=5:8, c=9:12)
df['d'] <- seq(10,13)
df <- df[,c('a','b','d','c')]
于 2018-04-26T16:10:32.567 に答える